Mercurial > emacs
annotate lisp/progmodes/cc-defs.el @ 45401:317e23417505
* fns.c (Fstring_equal, Fstring_lessp, Frequire, sxhash): Use
SYMBOL_NAME and XSTRING instead of XSYMBOL and name field.
author | Ken Raeburn <raeburn@raeburn.org> |
---|---|
date | Mon, 20 May 2002 08:05:43 +0000 |
parents | 7a3ac6c387fe |
children | 0d8b17d428b5 |
rev | line source |
---|---|
21112
b113342cb7ad
(c-emacs-features): Var moved to cc-vars.el.
Richard M. Stallman <rms@gnu.org>
parents:
20913
diff
changeset
|
1 ;;; cc-defs.el --- compile time definitions for CC Mode |
18720 | 2 |
36920 | 3 ;; Copyright (C) 1985,1987,1992-2001 Free Software Foundation, Inc. |
18720 | 4 |
30404
3393922ea102
(c-end-of-defun-1): Fixed forward scanning into
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
5 ;; Authors: 2000- Martin Stjernholm |
3393922ea102
(c-end-of-defun-1): Fixed forward scanning into
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
6 ;; 1998-1999 Barry A. Warsaw and Martin Stjernholm |
24282 | 7 ;; 1992-1997 Barry A. Warsaw |
18720 | 8 ;; 1987 Dave Detlefs and Stewart Clamen |
9 ;; 1985 Richard M. Stallman | |
24282 | 10 ;; Maintainer: bug-cc-mode@gnu.org |
18720 | 11 ;; Created: 22-Apr-1997 (split from cc-mode.el) |
20141 | 12 ;; Version: See cc-mode.el |
18720 | 13 ;; Keywords: c languages oop |
14 | |
15 ;; This file is part of GNU Emacs. | |
16 | |
17 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
18 ;; it under the terms of the GNU General Public License as published by | |
19 ;; the Free Software Foundation; either version 2, or (at your option) | |
20 ;; any later version. | |
21 | |
22 ;; GNU Emacs is distributed in the hope that it will be useful, | |
23 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
24 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
25 ;; GNU General Public License for more details. | |
26 | |
27 ;; 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:
38422
diff
changeset
|
28 ;; along with GNU Emacs; see the file COPYING. If not, write to |
36920 | 29 ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
18720 | 30 ;; Boston, MA 02111-1307, USA. |
31 | |
38422
7a94f1c588c4
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
36920
diff
changeset
|
32 ;;; Commentary: |
7a94f1c588c4
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
36920
diff
changeset
|
33 |
7a94f1c588c4
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
36920
diff
changeset
|
34 ;;; Code: |
7a94f1c588c4
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
36920
diff
changeset
|
35 |
36920 | 36 (eval-when-compile |
37 (let ((load-path | |
38 (if (and (boundp 'byte-compile-dest-file) | |
39 (stringp byte-compile-dest-file)) | |
40 (cons (file-name-directory byte-compile-dest-file) load-path) | |
41 load-path))) | |
42 (require 'cc-bytecomp))) | |
24282 | 43 |
36920 | 44 ;; cc-mode-19.el contains compatibility macros that should be used if |
45 ;; needed. | |
46 (eval-and-compile | |
47 (if (or (not (fboundp 'functionp)) | |
48 (not (condition-case nil | |
49 (progn (eval '(char-before)) t) | |
50 (error nil))) | |
51 (not (condition-case nil | |
52 (progn (eval '(char-after)) t) | |
53 (error nil))) | |
54 (not (fboundp 'when)) | |
55 (not (fboundp 'unless))) | |
56 (cc-load "cc-mode-19"))) | |
57 | |
58 ;; Silence the compiler. | |
59 (cc-bytecomp-defvar c-enable-xemacs-performance-kludge-p) ; In cc-vars.el | |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
38422
diff
changeset
|
60 (cc-bytecomp-defvar c-buffer-is-cc-mode) ; In cc-vars.el |
36920 | 61 (cc-bytecomp-defun buffer-syntactic-context-depth) ; XEmacs |
62 (cc-bytecomp-defun region-active-p) ; XEmacs | |
63 (cc-bytecomp-defvar zmacs-region-stays) ; XEmacs | |
64 (cc-bytecomp-defvar zmacs-regions) ; XEmacs | |
65 (cc-bytecomp-defvar mark-active) ; Emacs | |
66 (cc-bytecomp-defun scan-lists) ; 5 args in XEmacs, 3 in Emacs | |
67 (require 'derived) ; Only necessary in Emacs | |
24282 | 68 |
69 | |
36920 | 70 ;;; Macros. |
71 | |
72 ;;; Helpers for building regexps. | |
73 (defmacro c-paren-re (re) | |
74 `(concat "\\(" ,re "\\)")) | |
75 (defmacro c-identifier-re (re) | |
76 `(concat "\\<\\(" ,re "\\)\\>[^_]")) | |
77 | |
78 (defmacro c-point (position &optional point) | |
79 ;; Returns the value of certain commonly referenced POSITIONs | |
80 ;; relative to POINT. The current point is used if POINT isn't | |
81 ;; specified. POSITION can be one of the following symbols: | |
18720 | 82 ;; |
83 ;; bol -- beginning of line | |
84 ;; eol -- end of line | |
85 ;; bod -- beginning of defun | |
24282 | 86 ;; eod -- end of defun |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
38422
diff
changeset
|
87 ;; boi -- beginning of indentation |
18720 | 88 ;; ionl -- indentation of next line |
89 ;; iopl -- indentation of previous line | |
90 ;; bonl -- beginning of next 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:
38422
diff
changeset
|
91 ;; eonl -- end of next line |
18720 | 92 ;; bopl -- beginning of previous 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:
38422
diff
changeset
|
93 ;; eopl -- end of previous line |
18720 | 94 ;; |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
38422
diff
changeset
|
95 ;; If the referenced position doesn't exist, the closest accessible |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
38422
diff
changeset
|
96 ;; point to it is returned. This function does not modify point 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:
38422
diff
changeset
|
97 ;; mark. |
26817 | 98 `(save-excursion |
36920 | 99 ,(if point `(goto-char ,point)) |
26817 | 100 ,(if (and (eq (car-safe position) 'quote) |
101 (symbolp (eval position))) | |
102 (let ((position (eval position))) | |
103 (cond | |
104 ((eq position 'bol) `(beginning-of-line)) | |
105 ((eq position 'eol) `(end-of-line)) | |
106 ((eq position 'boi) `(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:
38422
diff
changeset
|
107 ((eq position 'bod) `(c-beginning-of-defun-1)) |
26817 | 108 ((eq position 'bonl) `(forward-line 1)) |
109 ((eq position 'bopl) `(forward-line -1)) | |
110 ((eq position 'eod) `(c-end-of-defun-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:
38422
diff
changeset
|
111 ((eq position 'eopl) `(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:
38422
diff
changeset
|
112 (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:
38422
diff
changeset
|
113 (or (bobp) (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:
38422
diff
changeset
|
114 ((eq position 'eonl) `(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:
38422
diff
changeset
|
115 (forward-line 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:
38422
diff
changeset
|
116 (end-of-line))) |
26817 | 117 ((eq position 'iopl) `(progn |
118 (forward-line -1) | |
119 (back-to-indentation))) | |
120 ((eq position 'ionl) `(progn | |
121 (forward-line 1) | |
122 (back-to-indentation))) | |
123 (t (error "unknown buffer position requested: %s" position)))) | |
124 ;;(message "c-point long expansion") | |
125 `(let ((position ,position)) | |
126 (cond | |
127 ((eq position 'bol) (beginning-of-line)) | |
128 ((eq position 'eol) (end-of-line)) | |
129 ((eq position 'boi) (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:
38422
diff
changeset
|
130 ((eq position 'bod) (c-beginning-of-defun-1)) |
26817 | 131 ((eq position 'bonl) (forward-line 1)) |
132 ((eq position 'bopl) (forward-line -1)) | |
133 ((eq position 'eod) (c-end-of-defun-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:
38422
diff
changeset
|
134 ((eq position 'eopl) (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:
38422
diff
changeset
|
135 (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:
38422
diff
changeset
|
136 (or (bobp) (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:
38422
diff
changeset
|
137 ((eq position 'eonl) (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:
38422
diff
changeset
|
138 (forward-line 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:
38422
diff
changeset
|
139 (end-of-line))) |
26817 | 140 ((eq position 'iopl) (progn |
141 (forward-line -1) | |
142 (back-to-indentation))) | |
143 ((eq position 'ionl) (progn | |
144 (forward-line 1) | |
145 (back-to-indentation))) | |
146 (t (error "unknown buffer position requested: %s" position))))) | |
147 (point))) | |
18720 | 148 |
149 (defmacro c-safe (&rest body) | |
150 ;; safely execute BODY, return nil if an error occurred | |
26817 | 151 `(condition-case nil |
152 (progn ,@body) | |
153 (error 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:
38422
diff
changeset
|
154 (put 'c-safe 'lisp-indent-function 0) |
26817 | 155 |
36920 | 156 (defmacro c-forward-sexp (&optional arg) |
157 ;; like forward-sexp except | |
158 ;; 1. this is much stripped down from the XEmacs version | |
159 ;; 2. this cannot be used as a command, so we're insulated from | |
160 ;; XEmacs' losing efforts to make forward-sexp more user | |
161 ;; friendly | |
162 ;; 3. Preserves the semantics most of CC Mode is based on | |
163 (or arg (setq arg 1)) | |
164 `(goto-char (or (scan-sexps (point) ,arg) | |
165 ,(if (numberp arg) | |
166 (if (> arg 0) `(point-max) `(point-min)) | |
167 `(if (> ,arg 0) (point-max) (point-min)))))) | |
168 | |
169 (defmacro c-backward-sexp (&optional arg) | |
170 ;; See c-forward-sexp and reverse directions | |
171 (or arg (setq arg 1)) | |
172 `(c-forward-sexp ,(if (numberp arg) (- arg) `(- ,arg)))) | |
173 | |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
38422
diff
changeset
|
174 ;; Wrappers for common scan-lists cases, mainly because it's almost |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
38422
diff
changeset
|
175 ;; impossible to get a feel for how that function works. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
38422
diff
changeset
|
176 (defmacro 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:
38422
diff
changeset
|
177 `(c-safe (scan-lists ,pos 1 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:
38422
diff
changeset
|
178 (defmacro 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:
38422
diff
changeset
|
179 `(c-safe (scan-lists ,pos -1 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:
38422
diff
changeset
|
180 (defmacro 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:
38422
diff
changeset
|
181 `(c-safe (scan-lists ,pos 1 -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:
38422
diff
changeset
|
182 (defmacro c-down-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:
38422
diff
changeset
|
183 `(c-safe (scan-lists ,pos -1 -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:
38422
diff
changeset
|
184 |
36920 | 185 (defmacro c-add-syntax (symbol &optional relpos) |
186 ;; a simple macro to append the syntax in symbol to the syntax list. | |
187 ;; try to increase performance by using this 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:
38422
diff
changeset
|
188 `(let ((relpos-tmp ,relpos)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
38422
diff
changeset
|
189 (if relpos-tmp (setq syntactic-relpos relpos-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:
38422
diff
changeset
|
190 (setq syntax (cons (cons ,symbol relpos-tmp) syntax)))) |
36920 | 191 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
38422
diff
changeset
|
192 (defmacro c-benign-error (format &rest args) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
38422
diff
changeset
|
193 ;; Formats an error message for the echo area and dings, i.e. like |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
38422
diff
changeset
|
194 ;; `error' but doesn't abort. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
38422
diff
changeset
|
195 `(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:
38422
diff
changeset
|
196 (message ,format ,@args) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
38422
diff
changeset
|
197 (ding))) |
36920 | 198 |
199 (defmacro c-update-modeline () | |
200 ;; set the c-auto-hungry-string for the correct designation on the modeline | |
201 `(progn | |
202 (setq c-auto-hungry-string | |
203 (if c-auto-newline | |
204 (if c-hungry-delete-key "/ah" "/a") | |
205 (if c-hungry-delete-key "/h" nil))) | |
206 (force-mode-line-update))) | |
207 | |
208 (defmacro c-with-syntax-table (table &rest code) | |
209 ;; Temporarily switches to the specified syntax table in a failsafe | |
210 ;; way to execute code. | |
211 `(let ((c-with-syntax-table-orig-table (syntax-table))) | |
212 (unwind-protect | |
213 (progn | |
214 (set-syntax-table ,table) | |
215 ,@code) | |
216 (set-syntax-table c-with-syntax-table-orig-table)))) | |
217 (put 'c-with-syntax-table 'lisp-indent-function 1) | |
218 | |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
38422
diff
changeset
|
219 (defmacro c-skip-ws-forward (&optional 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:
38422
diff
changeset
|
220 "Skip over any whitespace following 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:
38422
diff
changeset
|
221 This function skips over horizontal and vertical whitespace and 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:
38422
diff
changeset
|
222 continuations." |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
38422
diff
changeset
|
223 (if 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:
38422
diff
changeset
|
224 `(let ((-limit- (or ,limit (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:
38422
diff
changeset
|
225 (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:
38422
diff
changeset
|
226 ;; skip-syntax-* doesn't count \n as whitespace.. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
38422
diff
changeset
|
227 (skip-chars-forward " \t\n\r\f" -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:
38422
diff
changeset
|
228 (when (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:
38422
diff
changeset
|
229 (< (point) -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:
38422
diff
changeset
|
230 (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:
38422
diff
changeset
|
231 (or (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:
38422
diff
changeset
|
232 (progn (backward-char) 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:
38422
diff
changeset
|
233 '(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:
38422
diff
changeset
|
234 (skip-chars-forward " \t\n\r\f") |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
38422
diff
changeset
|
235 (when (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:
38422
diff
changeset
|
236 (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:
38422
diff
changeset
|
237 (or (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:
38422
diff
changeset
|
238 (progn (backward-char) 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:
38422
diff
changeset
|
239 |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
38422
diff
changeset
|
240 (defmacro c-skip-ws-backward (&optional 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:
38422
diff
changeset
|
241 "Skip over any whitespace preceding 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:
38422
diff
changeset
|
242 This function skips over horizontal and vertical whitespace and 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:
38422
diff
changeset
|
243 continuations." |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
38422
diff
changeset
|
244 (if 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:
38422
diff
changeset
|
245 `(let ((-limit- (or ,limit (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:
38422
diff
changeset
|
246 (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:
38422
diff
changeset
|
247 ;; skip-syntax-* doesn't count \n as whitespace.. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
38422
diff
changeset
|
248 (skip-chars-backward " \t\n\r\f" -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:
38422
diff
changeset
|
249 (and (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:
38422
diff
changeset
|
250 (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:
38422
diff
changeset
|
251 (> (point) -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:
38422
diff
changeset
|
252 (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:
38422
diff
changeset
|
253 '(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:
38422
diff
changeset
|
254 (skip-chars-backward " \t\n\r\f") |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
38422
diff
changeset
|
255 (and (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:
38422
diff
changeset
|
256 (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:
38422
diff
changeset
|
257 (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:
38422
diff
changeset
|
258 |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
38422
diff
changeset
|
259 ;; Make edebug understand the 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:
38422
diff
changeset
|
260 (eval-after-load "edebug" |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
38422
diff
changeset
|
261 '(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:
38422
diff
changeset
|
262 (def-edebug-spec c-paren-re 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:
38422
diff
changeset
|
263 (def-edebug-spec c-identifier-re 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:
38422
diff
changeset
|
264 (def-edebug-spec c-point ([&or symbolp form] &optional form)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
38422
diff
changeset
|
265 (def-edebug-spec c-safe 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:
38422
diff
changeset
|
266 (def-edebug-spec c-forward-sexp (&optional [&or numberp form])) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
38422
diff
changeset
|
267 (def-edebug-spec c-backward-sexp (&optional [&or numberp form])) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
38422
diff
changeset
|
268 (def-edebug-spec c-up-list-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:
38422
diff
changeset
|
269 (def-edebug-spec c-up-list-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:
38422
diff
changeset
|
270 (def-edebug-spec c-down-list-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:
38422
diff
changeset
|
271 (def-edebug-spec c-down-list-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:
38422
diff
changeset
|
272 (def-edebug-spec c-add-syntax 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:
38422
diff
changeset
|
273 (def-edebug-spec c-add-class-syntax 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:
38422
diff
changeset
|
274 (def-edebug-spec c-benign-error 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:
38422
diff
changeset
|
275 (def-edebug-spec c-with-syntax-table 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:
38422
diff
changeset
|
276 (def-edebug-spec c-skip-ws-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:
38422
diff
changeset
|
277 (def-edebug-spec c-skip-ws-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:
38422
diff
changeset
|
278 |
36920 | 279 ;;; Inline functions. |
280 | |
281 ;; Note: All these after the macros, to be on safe side in avoiding | |
282 ;; bugs where macros are defined too late. These bugs often only show | |
283 ;; when the files are compiled in a certain order within the same | |
284 ;; session. | |
285 | |
26817 | 286 (defsubst c-beginning-of-defun-1 () |
287 ;; Wrapper around beginning-of-defun. | |
288 ;; | |
289 ;; NOTE: This function should contain the only explicit use of | |
290 ;; beginning-of-defun in CC Mode. Eventually something better than | |
291 ;; b-o-d will be available and this should be the only place the | |
292 ;; code needs to change. Everything else should use | |
293 ;; (c-beginning-of-defun-1) | |
294 (if (and (fboundp 'buffer-syntactic-context-depth) | |
295 c-enable-xemacs-performance-kludge-p) | |
296 ;; XEmacs only. This can improve the performance of | |
297 ;; c-parse-state to between 3 and 60 times faster when | |
298 ;; braces are hung. It can also degrade performance by | |
299 ;; about as much when braces are not hung. | |
300 (let (pos) | |
301 (while (not pos) | |
302 (save-restriction | |
303 (widen) | |
304 (setq pos (scan-lists (point) -1 | |
305 (buffer-syntactic-context-depth) | |
306 nil t))) | |
307 (cond | |
308 ((bobp) (setq pos (point-min))) | |
309 ((not pos) | |
310 (let ((distance (skip-chars-backward "^{"))) | |
311 ;; unbalanced parenthesis, while illegal C code, | |
312 ;; shouldn't cause an infloop! See unbal.c | |
313 (when (zerop distance) | |
314 ;; Punt! | |
315 (beginning-of-defun) | |
316 (setq pos (point))))) | |
317 ((= pos 0)) | |
318 ((not (eq (char-after pos) ?{)) | |
319 (goto-char pos) | |
320 (setq pos nil)) | |
321 )) | |
322 (goto-char pos)) | |
323 ;; Emacs, which doesn't have buffer-syntactic-context-depth | |
324 (beginning-of-defun)) | |
325 ;; if defun-prompt-regexp is non-nil, b-o-d won't leave us at the | |
326 ;; open brace. | |
327 (and defun-prompt-regexp | |
328 (looking-at defun-prompt-regexp) | |
329 (goto-char (match-end 0)))) | |
330 | |
331 (defsubst c-end-of-defun-1 () | |
332 ;; Replacement for end-of-defun that use c-beginning-of-defun-1. | |
30404
3393922ea102
(c-end-of-defun-1): Fixed forward scanning into
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
333 (let ((start (point))) |
3393922ea102
(c-end-of-defun-1): Fixed forward scanning into
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
334 ;; Skip forward into the next defun block. Don't bother to avoid |
3393922ea102
(c-end-of-defun-1): Fixed forward scanning into
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
335 ;; comments, literals etc, since beginning-of-defun doesn't do that |
3393922ea102
(c-end-of-defun-1): Fixed forward scanning into
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
336 ;; anyway. |
3393922ea102
(c-end-of-defun-1): Fixed forward scanning into
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
337 (skip-chars-forward "^}") |
3393922ea102
(c-end-of-defun-1): Fixed forward scanning into
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
338 (c-beginning-of-defun-1) |
3393922ea102
(c-end-of-defun-1): Fixed forward scanning into
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
339 (if (eq (char-after) ?{) |
3393922ea102
(c-end-of-defun-1): Fixed forward scanning into
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
340 (c-forward-sexp)) |
3393922ea102
(c-end-of-defun-1): Fixed forward scanning into
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
341 (if (< (point) start) |
3393922ea102
(c-end-of-defun-1): Fixed forward scanning into
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
342 (goto-char (point-max))))) |
18720 | 343 |
344 (defsubst c-intersect-lists (list alist) | |
345 ;; return the element of ALIST that matches the first element found | |
346 ;; in LIST. Uses assq. | |
347 (let (match) | |
348 (while (and list | |
349 (not (setq match (assq (car list) alist)))) | |
350 (setq list (cdr list))) | |
351 match)) | |
352 | |
353 (defsubst c-lookup-lists (list alist1 alist2) | |
354 ;; first, find the first entry from LIST that is present in ALIST1, | |
355 ;; then find the entry in ALIST2 for that entry. | |
356 (assq (car (c-intersect-lists list alist1)) alist2)) | |
357 | |
358 (defsubst c-langelem-col (langelem &optional preserve-point) | |
359 ;; convenience routine to return the column of langelem's relpos. | |
360 ;; Leaves point at the relpos unless preserve-point is non-nil. | |
30404
3393922ea102
(c-end-of-defun-1): Fixed forward scanning into
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
361 (if (cdr langelem) |
3393922ea102
(c-end-of-defun-1): Fixed forward scanning into
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
362 (let ((here (point))) |
3393922ea102
(c-end-of-defun-1): Fixed forward scanning into
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
363 (goto-char (cdr langelem)) |
3393922ea102
(c-end-of-defun-1): Fixed forward scanning into
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
364 (prog1 (current-column) |
3393922ea102
(c-end-of-defun-1): Fixed forward scanning into
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
365 (if preserve-point |
3393922ea102
(c-end-of-defun-1): Fixed forward scanning into
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
366 (goto-char here)) |
3393922ea102
(c-end-of-defun-1): Fixed forward scanning into
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
367 )) |
3393922ea102
(c-end-of-defun-1): Fixed forward scanning into
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
368 0)) |
18720 | 369 |
370 (defsubst c-keep-region-active () | |
371 ;; Do whatever is necessary to keep the region active in XEmacs. | |
36920 | 372 ;; This is not needed for Emacs. |
18720 | 373 (and (boundp 'zmacs-region-stays) |
374 (setq zmacs-region-stays t))) | |
375 | |
24282 | 376 (defsubst c-region-is-active-p () |
377 ;; Return t when the region is active. The determination of region | |
378 ;; activeness is different in both Emacs and XEmacs. | |
379 (cond | |
380 ;; XEmacs | |
381 ((and (fboundp 'region-active-p) | |
26817 | 382 (boundp 'zmacs-regions) |
24282 | 383 zmacs-regions) |
384 (region-active-p)) | |
385 ;; Emacs | |
386 ((boundp 'mark-active) mark-active) | |
387 ;; fallback; shouldn't get here | |
388 (t (mark t)))) | |
389 | |
390 (defsubst c-major-mode-is (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:
38422
diff
changeset
|
391 (eq c-buffer-is-cc-mode mode)) |
24282 | 392 |
18720 | 393 |
36920 | 394 (cc-provide 'cc-defs) |
38422
7a94f1c588c4
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
36920
diff
changeset
|
395 |
18720 | 396 ;;; cc-defs.el ends here |