Mercurial > emacs
annotate lisp/progmodes/cc-defs.el @ 108742:36dd9f97c404
Fix a bug which happens when doing (c-parse-state) in a CPP construct:
Exclude any "new" CPP construct from taking part in the scanning.
author | Alan Mackenzie <acm@muc.de> |
---|---|
date | Fri, 21 May 2010 19:51:48 +0000 |
parents | 1786f2e6a856 |
children | 18526db8f26d bfaf9e31b45e |
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 |
74372 | 3 ;; Copyright (C) 1985, 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998, |
106815 | 4 ;; 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 |
75347 | 5 ;; Free Software Foundation, Inc. |
18720 | 6 |
75307 | 7 ;; Authors: 2003- Alan Mackenzie |
8 ;; 1998- Martin Stjernholm | |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
9 ;; 1992-1999 Barry A. Warsaw |
101112
0685234e527d
Comment (minor header format fixes).
Glenn Morris <rgm@gnu.org>
parents:
100908
diff
changeset
|
10 ;; 1987 Dave Detlefs |
0685234e527d
Comment (minor header format fixes).
Glenn Morris <rgm@gnu.org>
parents:
100908
diff
changeset
|
11 ;; 1987 Stewart Clamen |
18720 | 12 ;; 1985 Richard M. Stallman |
24282 | 13 ;; Maintainer: bug-cc-mode@gnu.org |
18720 | 14 ;; Created: 22-Apr-1997 (split from cc-mode.el) |
20141 | 15 ;; Version: See cc-mode.el |
18720 | 16 ;; Keywords: c languages oop |
17 | |
18 ;; This file is part of GNU Emacs. | |
19 | |
94673
52b7a8c22af5
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93975
diff
changeset
|
20 ;; GNU Emacs is free software: you can redistribute it and/or modify |
18720 | 21 ;; it under the terms of the GNU General Public License as published by |
94673
52b7a8c22af5
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93975
diff
changeset
|
22 ;; the Free Software Foundation, either version 3 of the License, or |
52b7a8c22af5
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93975
diff
changeset
|
23 ;; (at your option) any later version. |
18720 | 24 |
25 ;; GNU Emacs is distributed in the hope that it will be useful, | |
26 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
27 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
28 ;; GNU General Public License for more details. | |
29 | |
30 ;; You should have received a copy of the GNU General Public License | |
94673
52b7a8c22af5
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93975
diff
changeset
|
31 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
18720 | 32 |
38422
7a94f1c588c4
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
36920
diff
changeset
|
33 ;;; Commentary: |
7a94f1c588c4
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
36920
diff
changeset
|
34 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
35 ;; This file contains macros, defsubsts, and various other things that |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
36 ;; must be loaded early both during compilation and at runtime. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
37 |
38422
7a94f1c588c4
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
36920
diff
changeset
|
38 ;;; Code: |
7a94f1c588c4
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
36920
diff
changeset
|
39 |
36920 | 40 (eval-when-compile |
41 (let ((load-path | |
42 (if (and (boundp 'byte-compile-dest-file) | |
43 (stringp byte-compile-dest-file)) | |
44 (cons (file-name-directory byte-compile-dest-file) load-path) | |
45 load-path))) | |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
46 (load "cc-bytecomp" nil t))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
47 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
48 (eval-when-compile (require 'cl)) ; was (cc-external-require 'cl). ACM 2005/11/29. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
49 (cc-external-require 'regexp-opt) |
24282 | 50 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
51 ;; Silence the compiler. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
52 (cc-bytecomp-defvar c-enable-xemacs-performance-kludge-p) ; In cc-vars.el |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
53 (cc-bytecomp-defun buffer-syntactic-context-depth) ; XEmacs |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
54 (cc-bytecomp-defun region-active-p) ; XEmacs |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
55 (cc-bytecomp-defvar zmacs-region-stays) ; XEmacs |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
56 (cc-bytecomp-defvar zmacs-regions) ; XEmacs |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
57 (cc-bytecomp-defvar mark-active) ; Emacs |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
58 (cc-bytecomp-defvar deactivate-mark) ; Emacs |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
59 (cc-bytecomp-defvar inhibit-point-motion-hooks) ; Emacs |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
60 (cc-bytecomp-defvar parse-sexp-lookup-properties) ; Emacs |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
61 (cc-bytecomp-defvar text-property-default-nonsticky) ; Emacs 21 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
62 (cc-bytecomp-defvar lookup-syntax-properties) ; XEmacs |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
63 (cc-bytecomp-defun string-to-syntax) ; Emacs 21 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
64 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
65 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
66 ;; cc-fix.el contains compatibility macros that should be used if |
36920 | 67 ;; needed. |
68 (eval-and-compile | |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
69 (if (or (/= (regexp-opt-depth "\\(\\(\\)\\)") 2) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
70 (not (fboundp 'push))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
71 (cc-load "cc-fix"))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
72 |
71754
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
73 ; (eval-after-load "font-lock" ; 2006-07-09. font-lock is now preloaded |
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
74 ; ' |
85703
49b7304c73bb
Reorder conditions to avoid warnings.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78234
diff
changeset
|
75 (if (and (featurep 'xemacs) ; There is now (2005/12) code in GNU Emacs CVS |
77081
e8bd3e011b64
Changes to make `narrow-to-defun' and `mark-defun' work properly in CC
Alan Mackenzie <acm@muc.de>
parents:
75515
diff
changeset
|
76 ; to make the call to f-l-c-k throw an error. |
85703
49b7304c73bb
Reorder conditions to avoid warnings.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78234
diff
changeset
|
77 (not (featurep 'cc-fix)) ; only load the file once. |
77081
e8bd3e011b64
Changes to make `narrow-to-defun' and `mark-defun' work properly in CC
Alan Mackenzie <acm@muc.de>
parents:
75515
diff
changeset
|
78 (let (font-lock-keywords) |
e8bd3e011b64
Changes to make `narrow-to-defun' and `mark-defun' work properly in CC
Alan Mackenzie <acm@muc.de>
parents:
75515
diff
changeset
|
79 (font-lock-compile-keywords '("\\<\\>")) |
e8bd3e011b64
Changes to make `narrow-to-defun' and `mark-defun' work properly in CC
Alan Mackenzie <acm@muc.de>
parents:
75515
diff
changeset
|
80 font-lock-keywords)) ; did the previous call foul this up? |
e8bd3e011b64
Changes to make `narrow-to-defun' and `mark-defun' work properly in CC
Alan Mackenzie <acm@muc.de>
parents:
75515
diff
changeset
|
81 (load "cc-fix")) ;) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
82 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
83 ;; The above takes care of the delayed loading, but this is necessary |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
84 ;; to ensure correct byte compilation. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
85 (eval-when-compile |
85703
49b7304c73bb
Reorder conditions to avoid warnings.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78234
diff
changeset
|
86 (if (and (featurep 'xemacs) |
49b7304c73bb
Reorder conditions to avoid warnings.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78234
diff
changeset
|
87 (not (featurep 'cc-fix)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
88 (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
89 (require 'font-lock) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
90 (let (font-lock-keywords) |
69140
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
91 (font-lock-compile-keywords '("\\<\\>")) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
92 font-lock-keywords))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
93 (cc-load "cc-fix"))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
94 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
95 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
96 ;;; Variables also used at compile time. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
97 |
106101
792912125cc4
(c-version): Bump to 5.31.8.
Alan Mackenzie <acm@muc.de>
parents:
105813
diff
changeset
|
98 (defconst c-version "5.31.8" |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
99 "CC Mode version number.") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
100 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
101 (defconst c-version-sym (intern c-version)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
102 ;; A little more compact and faster in comparisons. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
103 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
104 (defvar c-buffer-is-cc-mode nil |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
105 "Non-nil for all buffers with a major mode derived from CC Mode. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
106 Otherwise, this variable is nil. I.e. this variable is non-nil for |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
107 `c-mode', `c++-mode', `objc-mode', `java-mode', `idl-mode', |
52610
ab5832ac1f83
Bumped patch release number. Minor docstring update.
Martin Stjernholm <mast@lysator.liu.se>
parents:
52401
diff
changeset
|
108 `pike-mode', `awk-mode', and any other non-CC Mode mode that calls |
ab5832ac1f83
Bumped patch release number. Minor docstring update.
Martin Stjernholm <mast@lysator.liu.se>
parents:
52401
diff
changeset
|
109 `c-initialize-cc-mode'. The value is the mode symbol itself |
ab5832ac1f83
Bumped patch release number. Minor docstring update.
Martin Stjernholm <mast@lysator.liu.se>
parents:
52401
diff
changeset
|
110 \(i.e. `c-mode' etc) of the original CC Mode mode, or just t if it's |
ab5832ac1f83
Bumped patch release number. Minor docstring update.
Martin Stjernholm <mast@lysator.liu.se>
parents:
52401
diff
changeset
|
111 not known.") |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
112 (make-variable-buffer-local 'c-buffer-is-cc-mode) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
113 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
114 ;; Have to make `c-buffer-is-cc-mode' permanently local so that it |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
115 ;; survives the initialization of the derived mode. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
116 (put 'c-buffer-is-cc-mode 'permanent-local t) |
36920 | 117 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
118 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
119 ;; The following is used below during compilation. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
120 (eval-and-compile |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
121 (defvar c-inside-eval-when-compile nil) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
122 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
123 (defmacro cc-eval-when-compile (&rest body) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
124 "Like `progn', but evaluates the body at compile time. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
125 The result of the body appears to the compiler as a quoted constant. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
126 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
127 This variant works around bugs in `eval-when-compile' in various |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
128 \(X)Emacs versions. See cc-defs.el for details." |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
129 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
130 (if c-inside-eval-when-compile |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
131 ;; XEmacs 21.4.6 has a bug in `eval-when-compile' in that it |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
132 ;; evaluates its body at macro expansion time if it's nested |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
133 ;; inside another `eval-when-compile'. So we use a dynamically |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
134 ;; bound variable to avoid nesting them. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
135 `(progn ,@body) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
136 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
137 `(eval-when-compile |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
138 ;; In all (X)Emacsen so far, `eval-when-compile' byte compiles |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
139 ;; its contents before evaluating it. That can cause forms to |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
140 ;; be compiled in situations they aren't intended to be |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
141 ;; compiled. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
142 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
143 ;; Example: It's not possible to defsubst a primitive, e.g. the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
144 ;; following will produce an error (in any emacs flavor), since |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
145 ;; `nthcdr' is a primitive function that's handled specially by |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
146 ;; the byte compiler and thus can't be redefined: |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
147 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
148 ;; (defsubst nthcdr (val) val) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
149 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
150 ;; `defsubst', like `defmacro', needs to be evaluated at |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
151 ;; compile time, so this will produce an error during byte |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
152 ;; compilation. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
153 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
154 ;; CC Mode occasionally needs to do things like this for |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
155 ;; cross-emacs compatibility. It therefore uses the following |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
156 ;; to conditionally do a `defsubst': |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
157 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
158 ;; (eval-when-compile |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
159 ;; (if (not (fboundp 'foo)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
160 ;; (defsubst foo ...))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
161 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
162 ;; But `eval-when-compile' byte compiles its contents and |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
163 ;; _then_ evaluates it (in all current emacs versions, up to |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
164 ;; and including Emacs 20.6 and XEmacs 21.1 as of this |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
165 ;; writing). So this will still produce an error, since the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
166 ;; byte compiler will get to the defsubst anyway. That's |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
167 ;; arguably a bug because the point with `eval-when-compile' is |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
168 ;; that it should evaluate rather than compile its contents. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
169 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
170 ;; We get around it by expanding the body to a quoted |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
171 ;; constant that we eval. That otoh introduce a problem in |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
172 ;; that a returned lambda expression doesn't get byte |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
173 ;; compiled (even if `function' is used). |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
174 (eval '(let ((c-inside-eval-when-compile t)) ,@body))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
175 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
176 (put 'cc-eval-when-compile 'lisp-indent-hook 0)) |
24282 | 177 |
178 | |
36920 | 179 ;;; Macros. |
180 | |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
181 (defmacro c-point (position &optional point) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
182 "Return the value of certain commonly referenced POSITIONs relative to POINT. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
183 The current point is used if POINT isn't specified. POSITION can be |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
184 one of the following symbols: |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
185 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
186 `bol' -- beginning of line |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
187 `eol' -- end of line |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
188 `bod' -- beginning of defun |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
189 `eod' -- end of defun |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
190 `boi' -- beginning of indentation |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
191 `ionl' -- indentation of next line |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
192 `iopl' -- indentation of previous line |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
193 `bonl' -- beginning of next line |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
194 `eonl' -- end of next line |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
195 `bopl' -- beginning of previous line |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
196 `eopl' -- end of previous line |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
197 `bosws' -- beginning of syntactic whitespace |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
198 `eosws' -- end of syntactic whitespace |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
199 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
200 If the referenced position doesn't exist, the closest accessible point |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
201 to it is returned. This function does not modify the point or the mark." |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
202 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
203 (if (eq (car-safe position) 'quote) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
204 (let ((position (eval position))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
205 (cond |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
206 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
207 ((eq position 'bol) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
208 (if (and (cc-bytecomp-fboundp 'line-beginning-position) (not point)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
209 `(line-beginning-position) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
210 `(save-excursion |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
211 ,@(if point `((goto-char ,point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
212 (beginning-of-line) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
213 (point)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
214 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
215 ((eq position 'eol) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
216 (if (and (cc-bytecomp-fboundp 'line-end-position) (not point)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
217 `(line-end-position) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
218 `(save-excursion |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
219 ,@(if point `((goto-char ,point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
220 (end-of-line) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
221 (point)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
222 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
223 ((eq position 'boi) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
224 `(save-excursion |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
225 ,@(if point `((goto-char ,point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
226 (back-to-indentation) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
227 (point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
228 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
229 ((eq position 'bod) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
230 `(save-excursion |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
231 ,@(if point `((goto-char ,point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
232 (c-beginning-of-defun-1) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
233 (point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
234 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
235 ((eq position 'eod) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
236 `(save-excursion |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
237 ,@(if point `((goto-char ,point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
238 (c-end-of-defun-1) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
239 (point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
240 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
241 ((eq position 'bopl) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
242 (if (and (cc-bytecomp-fboundp 'line-beginning-position) (not point)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
243 `(line-beginning-position 0) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
244 `(save-excursion |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
245 ,@(if point `((goto-char ,point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
246 (forward-line -1) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
247 (point)))) |
36920 | 248 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
249 ((eq position 'bonl) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
250 (if (and (cc-bytecomp-fboundp 'line-beginning-position) (not point)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
251 `(line-beginning-position 2) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
252 `(save-excursion |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
253 ,@(if point `((goto-char ,point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
254 (forward-line 1) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
255 (point)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
256 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
257 ((eq position 'eopl) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
258 (if (and (cc-bytecomp-fboundp 'line-end-position) (not point)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
259 `(line-end-position 0) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
260 `(save-excursion |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
261 ,@(if point `((goto-char ,point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
262 (beginning-of-line) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
263 (or (bobp) (backward-char)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
264 (point)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
265 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
266 ((eq position 'eonl) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
267 (if (and (cc-bytecomp-fboundp 'line-end-position) (not point)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
268 `(line-end-position 2) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
269 `(save-excursion |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
270 ,@(if point `((goto-char ,point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
271 (forward-line 1) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
272 (end-of-line) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
273 (point)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
274 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
275 ((eq position 'iopl) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
276 `(save-excursion |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
277 ,@(if point `((goto-char ,point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
278 (forward-line -1) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
279 (back-to-indentation) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
280 (point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
281 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
282 ((eq position 'ionl) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
283 `(save-excursion |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
284 ,@(if point `((goto-char ,point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
285 (forward-line 1) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
286 (back-to-indentation) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
287 (point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
288 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
289 ((eq position 'bosws) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
290 `(save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
291 ,@(if point `((goto-char ,point))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
292 (c-backward-syntactic-ws) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
293 (point))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
294 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
295 ((eq position 'eosws) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
296 `(save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
297 ,@(if point `((goto-char ,point))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
298 (c-forward-syntactic-ws) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
299 (point))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
300 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
301 (t (error "Unknown buffer position requested: %s" position)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
302 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
303 ;; The bulk of this should perhaps be in a function to avoid large |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
304 ;; expansions, but this case is not used anywhere in CC Mode (and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
305 ;; probably not anywhere else either) so we only have it to be on |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
306 ;; the safe side. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
307 (message "Warning: c-point long expansion") |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
308 `(save-excursion |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
309 ,@(if point `((goto-char ,point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
310 (let ((position ,position)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
311 (cond |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
312 ((eq position 'bol) (beginning-of-line)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
313 ((eq position 'eol) (end-of-line)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
314 ((eq position 'boi) (back-to-indentation)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
315 ((eq position 'bod) (c-beginning-of-defun-1)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
316 ((eq position 'eod) (c-end-of-defun-1)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
317 ((eq position 'bopl) (forward-line -1)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
318 ((eq position 'bonl) (forward-line 1)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
319 ((eq position 'eopl) (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
320 (beginning-of-line) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
321 (or (bobp) (backward-char)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
322 ((eq position 'eonl) (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
323 (forward-line 1) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
324 (end-of-line))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
325 ((eq position 'iopl) (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
326 (forward-line -1) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
327 (back-to-indentation))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
328 ((eq position 'ionl) (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
329 (forward-line 1) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
330 (back-to-indentation))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
331 ((eq position 'bosws) (c-backward-syntactic-ws)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
332 ((eq position 'eosws) (c-forward-syntactic-ws)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
333 (t (error "Unknown buffer position requested: %s" position)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
334 (point)))) |
18720 | 335 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
336 (defmacro c-region-is-active-p () |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
337 ;; Return t when the region is active. The determination of region |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
338 ;; activeness is different in both Emacs and XEmacs. |
87397
6bf362c56364
(c-region-is-active-p): Use `mark-active' if it's defined.
Richard M. Stallman <rms@gnu.org>
parents:
85703
diff
changeset
|
339 (if (cc-bytecomp-boundp 'mark-active) |
6bf362c56364
(c-region-is-active-p): Use `mark-active' if it's defined.
Richard M. Stallman <rms@gnu.org>
parents:
85703
diff
changeset
|
340 ;; Emacs. |
6bf362c56364
(c-region-is-active-p): Use `mark-active' if it's defined.
Richard M. Stallman <rms@gnu.org>
parents:
85703
diff
changeset
|
341 'mark-active |
6bf362c56364
(c-region-is-active-p): Use `mark-active' if it's defined.
Richard M. Stallman <rms@gnu.org>
parents:
85703
diff
changeset
|
342 ;; XEmacs. |
6bf362c56364
(c-region-is-active-p): Use `mark-active' if it's defined.
Richard M. Stallman <rms@gnu.org>
parents:
85703
diff
changeset
|
343 '(region-active-p))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
344 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
345 (defmacro c-set-region-active (activate) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
346 ;; Activate the region if ACTIVE is non-nil, deactivate it |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
347 ;; otherwise. Covers the differences between Emacs and XEmacs. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
348 (if (cc-bytecomp-fboundp 'zmacs-activate-region) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
349 ;; XEmacs. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
350 `(if ,activate |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
351 (zmacs-activate-region) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
352 (zmacs-deactivate-region)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
353 ;; Emacs. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
354 `(setq mark-active ,activate))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
355 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
356 (defmacro c-delete-and-extract-region (start end) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
357 "Delete the text between START and END and return it." |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
358 (if (cc-bytecomp-fboundp 'delete-and-extract-region) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
359 ;; Emacs 21.1 and later |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
360 `(delete-and-extract-region ,start ,end) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
361 ;; XEmacs and Emacs 20.x |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
362 `(prog1 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
363 (buffer-substring ,start ,end) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
364 (delete-region ,start ,end)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
365 |
18720 | 366 (defmacro c-safe (&rest body) |
367 ;; safely execute BODY, return nil if an error occurred | |
26817 | 368 `(condition-case nil |
369 (progn ,@body) | |
370 (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
|
371 (put 'c-safe 'lisp-indent-function 0) |
26817 | 372 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
373 (defmacro c-int-to-char (integer) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
374 ;; In GNU Emacs, a character is an integer. In XEmacs, a character is a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
375 ;; type distinct from an integer. Sometimes we need to convert integers to |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
376 ;; characters. `c-int-to-char' makes this conversion, if necessary. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
377 (if (fboundp 'int-to-char) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
378 `(int-to-char ,integer) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
379 integer)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
380 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
381 (defmacro c-sentence-end () |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
382 ;; Get the regular expression `sentence-end'. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
383 (if (cc-bytecomp-fboundp 'sentence-end) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
384 ;; Emacs 22: |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
385 `(sentence-end) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
386 ;; Emacs <22 + XEmacs |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
387 `sentence-end)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
388 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
389 (defmacro c-default-value-sentence-end () |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
390 ;; Get the default value of the variable sentence end. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
391 (if (cc-bytecomp-fboundp 'sentence-end) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
392 ;; Emacs 22: |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
393 `(let (sentence-end) (sentence-end)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
394 ;; Emacs <22 + XEmacs |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
395 `(default-value 'sentence-end))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
396 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
397 ;; The following is essentially `save-buffer-state' from lazy-lock.el. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
398 ;; It ought to be a standard macro. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
399 (defmacro c-save-buffer-state (varlist &rest body) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
400 "Bind variables according to VARLIST (in `let*' style) and eval BODY, |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
401 then restore the buffer state under the assumption that no significant |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
402 modification has been made in BODY. A change is considered |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
403 significant if it affects the buffer text in any way that isn't |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
404 completely restored again. Changes in text properties like `face' or |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
405 `syntax-table' are considered insignificant. This macro allows text |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
406 properties to be changed, even in a read-only buffer. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
407 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
408 This macro should be placed around all calculations which set |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
409 \"insignificant\" text properties in a buffer, even when the buffer is |
100148 | 410 known to be writable. That way, these text properties remain set |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
411 even if the user undoes the command which set them. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
412 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
413 This macro should ALWAYS be placed around \"temporary\" internal buffer |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
414 changes \(like adding a newline to calculate a text-property then |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
415 deleting it again\), so that the user never sees them on his |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
416 `buffer-undo-list'. See also `c-tentative-buffer-changes'. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
417 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
418 However, any user-visible changes to the buffer \(like auto-newlines\) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
419 must not be within a `c-save-buffer-state', since the user then |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
420 wouldn't be able to undo them. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
421 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
422 The return value is the value of the last form in BODY." |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
423 `(let* ((modified (buffer-modified-p)) (buffer-undo-list t) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
424 (inhibit-read-only t) (inhibit-point-motion-hooks t) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
425 before-change-functions after-change-functions |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
426 deactivate-mark |
79934
225355012caa
(c-save-buffer-state): Bind buffer-file-name and buffer-file-truename to
Alan Mackenzie <acm@muc.de>
parents:
79717
diff
changeset
|
427 buffer-file-name buffer-file-truename ; Prevent primitives checking |
225355012caa
(c-save-buffer-state): Bind buffer-file-name and buffer-file-truename to
Alan Mackenzie <acm@muc.de>
parents:
79717
diff
changeset
|
428 ; for file modification |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
429 ,@varlist) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
430 (unwind-protect |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
431 (progn ,@body) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
432 (and (not modified) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
433 (buffer-modified-p) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
434 (set-buffer-modified-p nil))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
435 (put 'c-save-buffer-state 'lisp-indent-function 1) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
436 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
437 (defmacro c-tentative-buffer-changes (&rest body) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
438 "Eval BODY and optionally restore the buffer contents to the state it |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
439 was in before BODY. Any changes are kept if the last form in BODY |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
440 returns non-nil. Otherwise it's undone using the undo facility, and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
441 various other buffer state that might be affected by the changes is |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
442 restored. That includes the current buffer, point, mark, mark |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
443 activation \(similar to `save-excursion'), and the modified state. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
444 The state is also restored if BODY exits nonlocally. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
445 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
446 If BODY makes a change that unconditionally is undone then wrap this |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
447 macro inside `c-save-buffer-state'. That way the change can be done |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
448 even when the buffer is read-only, and without interference from |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
449 various buffer change hooks." |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
450 `(let (-tnt-chng-keep |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
451 -tnt-chng-state) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
452 (unwind-protect |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
453 ;; Insert an undo boundary for use with `undo-more'. We |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
454 ;; don't use `undo-boundary' since it doesn't insert one |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
455 ;; unconditionally. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
456 (setq buffer-undo-list (cons nil buffer-undo-list) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
457 -tnt-chng-state (c-tnt-chng-record-state) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
458 -tnt-chng-keep (progn ,@body)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
459 (c-tnt-chng-cleanup -tnt-chng-keep -tnt-chng-state)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
460 (put 'c-tentative-buffer-changes 'lisp-indent-function 0) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
461 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
462 (defun c-tnt-chng-record-state () |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
463 ;; Used internally in `c-tentative-buffer-changes'. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
464 (vector buffer-undo-list ; 0 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
465 (current-buffer) ; 1 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
466 ;; No need to use markers for the point and mark; if the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
467 ;; undo got out of synch we're hosed anyway. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
468 (point) ; 2 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
469 (mark t) ; 3 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
470 (c-region-is-active-p) ; 4 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
471 (buffer-modified-p))) ; 5 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
472 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
473 (defun c-tnt-chng-cleanup (keep saved-state) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
474 ;; Used internally in `c-tentative-buffer-changes'. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
475 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
476 (let ((saved-undo-list (elt saved-state 0))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
477 (if (eq buffer-undo-list saved-undo-list) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
478 ;; No change was done afterall. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
479 (setq buffer-undo-list (cdr saved-undo-list)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
480 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
481 (if keep |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
482 ;; Find and remove the undo boundary. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
483 (let ((p buffer-undo-list)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
484 (while (not (eq (cdr p) saved-undo-list)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
485 (setq p (cdr p))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
486 (setcdr p (cdr saved-undo-list))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
487 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
488 ;; `primitive-undo' will remove the boundary. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
489 (setq saved-undo-list (cdr saved-undo-list)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
490 (let ((undo-in-progress t)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
491 (while (not (eq (setq buffer-undo-list |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
492 (primitive-undo 1 buffer-undo-list)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
493 saved-undo-list)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
494 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
495 (when (buffer-live-p (elt saved-state 1)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
496 (set-buffer (elt saved-state 1)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
497 (goto-char (elt saved-state 2)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
498 (set-mark (elt saved-state 3)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
499 (c-set-region-active (elt saved-state 4)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
500 (and (not (elt saved-state 5)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
501 (buffer-modified-p) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
502 (set-buffer-modified-p nil))))))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
503 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
504 (defmacro c-forward-syntactic-ws (&optional limit) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
505 "Forward skip over syntactic whitespace. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
506 Syntactic whitespace is defined as whitespace characters, comments, |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
507 and preprocessor directives. However if point starts inside a comment |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
508 or preprocessor directive, the content of it is not treated as |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
509 whitespace. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
510 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
511 LIMIT sets an upper limit of the forward movement, if specified. If |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
512 LIMIT or the end of the buffer is reached inside a comment or |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
513 preprocessor directive, the point will be left there. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
514 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
515 Note that this function might do hidden buffer changes. See the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
516 comment at the start of cc-engine.el for more info." |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
517 (if limit |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
518 `(save-restriction |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
519 (narrow-to-region (point-min) (or ,limit (point-max))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
520 (c-forward-sws)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
521 '(c-forward-sws))) |
36920 | 522 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
523 (defmacro c-backward-syntactic-ws (&optional limit) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
524 "Backward skip over syntactic whitespace. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
525 Syntactic whitespace is defined as whitespace characters, comments, |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
526 and preprocessor directives. However if point starts inside a comment |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
527 or preprocessor directive, the content of it is not treated as |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
528 whitespace. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
529 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
530 LIMIT sets a lower limit of the backward movement, if specified. If |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
531 LIMIT is reached inside a line comment or preprocessor directive then |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
532 the point is moved into it past the whitespace at the end. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
533 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
534 Note that this function might do hidden buffer changes. See the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
535 comment at the start of cc-engine.el for more info." |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
536 (if limit |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
537 `(save-restriction |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
538 (narrow-to-region (or ,limit (point-min)) (point-max)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
539 (c-backward-sws)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
540 '(c-backward-sws))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
541 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
542 (defmacro c-forward-sexp (&optional count) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
543 "Move forward across COUNT balanced expressions. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
544 A negative COUNT means move backward. Signal an error if the move |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
545 fails for any reason. |
36920 | 546 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
547 This is like `forward-sexp' except that it isn't interactive and does |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
548 not do any user friendly adjustments of the point and that it isn't |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
549 susceptible to user configurations such as disabling of signals in |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
550 certain situations." |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
551 (or count (setq count 1)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
552 `(goto-char (scan-sexps (point) ,count))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
553 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
554 (defmacro c-backward-sexp (&optional count) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
555 "See `c-forward-sexp' and reverse directions." |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
556 (or count (setq count 1)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
557 `(c-forward-sexp ,(if (numberp count) (- count) `(- ,count)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
558 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
559 (defmacro c-safe-scan-lists (from count depth &optional limit) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
560 "Like `scan-lists' but returns nil instead of signalling errors |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
561 for unbalanced parens. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
562 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
563 A limit for the search may be given. FROM is assumed to be on the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
564 right side of it." |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
565 (let ((res (if (featurep 'xemacs) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
566 `(scan-lists ,from ,count ,depth nil t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
567 `(c-safe (scan-lists ,from ,count ,depth))))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
568 (if limit |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
569 `(save-restriction |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
570 ,(if (numberp count) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
571 (if (< count 0) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
572 `(narrow-to-region ,limit (point-max)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
573 `(narrow-to-region (point-min) ,limit)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
574 `(if (< ,count 0) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
575 (narrow-to-region ,limit (point-max)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
576 (narrow-to-region (point-min) ,limit))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
577 ,res) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
578 res))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
579 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
580 |
44728
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
|
581 ;; 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
|
582 ;; impossible to get a feel for how that function works. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
583 |
75313
bbe81c239799
Add new functions, c-go-list-forward, c-go-list-backward.
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
584 (defmacro c-go-list-forward () |
bbe81c239799
Add new functions, c-go-list-forward, c-go-list-backward.
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
585 "Move backward across one balanced group of parentheses. |
bbe81c239799
Add new functions, c-go-list-forward, c-go-list-backward.
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
586 |
bbe81c239799
Add new functions, c-go-list-forward, c-go-list-backward.
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
587 Return POINT when we succeed, NIL when we fail. In the latter case, leave |
bbe81c239799
Add new functions, c-go-list-forward, c-go-list-backward.
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
588 point unmoved." |
bbe81c239799
Add new functions, c-go-list-forward, c-go-list-backward.
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
589 `(c-safe (let ((endpos (scan-lists (point) 1 0))) |
bbe81c239799
Add new functions, c-go-list-forward, c-go-list-backward.
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
590 (goto-char endpos) |
bbe81c239799
Add new functions, c-go-list-forward, c-go-list-backward.
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
591 endpos))) |
bbe81c239799
Add new functions, c-go-list-forward, c-go-list-backward.
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
592 |
bbe81c239799
Add new functions, c-go-list-forward, c-go-list-backward.
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
593 (defmacro c-go-list-backward () |
bbe81c239799
Add new functions, c-go-list-forward, c-go-list-backward.
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
594 "Move backward across one balanced group of parentheses. |
bbe81c239799
Add new functions, c-go-list-forward, c-go-list-backward.
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
595 |
bbe81c239799
Add new functions, c-go-list-forward, c-go-list-backward.
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
596 Return POINT when we succeed, NIL when we fail. In the latter case, leave |
bbe81c239799
Add new functions, c-go-list-forward, c-go-list-backward.
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
597 point unmoved." |
bbe81c239799
Add new functions, c-go-list-forward, c-go-list-backward.
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
598 `(c-safe (let ((endpos (scan-lists (point) -1 0))) |
bbe81c239799
Add new functions, c-go-list-forward, c-go-list-backward.
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
599 (goto-char endpos) |
bbe81c239799
Add new functions, c-go-list-forward, c-go-list-backward.
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
600 endpos))) |
bbe81c239799
Add new functions, c-go-list-forward, c-go-list-backward.
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
601 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
602 (defmacro c-up-list-forward (&optional pos limit) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
603 "Return the first position after the list sexp containing POS, |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
604 or nil if no such position exists. The point is used if POS is left out. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
605 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
606 A limit for the search may be given. The start position is assumed to |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
607 be before it." |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
608 `(c-safe-scan-lists ,(or pos `(point)) 1 1 ,limit)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
609 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
610 (defmacro c-up-list-backward (&optional pos limit) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
611 "Return the position of the start of the list sexp containing POS, |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
612 or nil if no such position exists. The point is used if POS is left out. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
613 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
614 A limit for the search may be given. The start position is assumed to |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
615 be after it." |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
616 `(c-safe-scan-lists ,(or pos `(point)) -1 1 ,limit)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
617 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
618 (defmacro c-down-list-forward (&optional pos limit) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
619 "Return the first position inside the first list sexp after POS, |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
620 or nil if no such position exists. The point is used if POS is left out. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
621 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
622 A limit for the search may be given. The start position is assumed to |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
623 be before it." |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
624 `(c-safe-scan-lists ,(or pos `(point)) 1 -1 ,limit)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
625 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
626 (defmacro c-down-list-backward (&optional pos limit) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
627 "Return the last position inside the last list sexp before POS, |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
628 or nil if no such position exists. The point is used if POS is left out. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
629 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
630 A limit for the search may be given. The start position is assumed to |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
631 be after it." |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
632 `(c-safe-scan-lists ,(or pos `(point)) -1 -1 ,limit)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
633 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
634 (defmacro c-go-up-list-forward (&optional pos limit) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
635 "Move the point to the first position after the list sexp containing POS, |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
636 or containing the point if POS is left out. Return t if such a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
637 position exists, otherwise nil is returned and the point isn't moved. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
638 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
639 A limit for the search may be given. The start position is assumed to |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
640 be before it." |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
641 (let ((res `(c-safe (goto-char (scan-lists ,(or pos `(point)) 1 1)) t))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
642 (if limit |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
643 `(save-restriction |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
644 (narrow-to-region (point-min) ,limit) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
645 ,res) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
646 res))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
647 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
648 (defmacro c-go-up-list-backward (&optional pos limit) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
649 "Move the point to the position of the start of the list sexp containing POS, |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
650 or containing the point if POS is left out. Return t if such a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
651 position exists, otherwise nil is returned and the point isn't moved. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
652 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
653 A limit for the search may be given. The start position is assumed to |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
654 be after it." |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
655 (let ((res `(c-safe (goto-char (scan-lists ,(or pos `(point)) -1 1)) t))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
656 (if limit |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
657 `(save-restriction |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
658 (narrow-to-region ,limit (point-max)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
659 ,res) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
660 res))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
661 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
662 (defmacro c-go-down-list-forward (&optional pos limit) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
663 "Move the point to the first position inside the first list sexp after POS, |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
664 or before the point if POS is left out. Return t if such a position |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
665 exists, otherwise nil is returned and the point isn't moved. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
666 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
667 A limit for the search may be given. The start position is assumed to |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
668 be before it." |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
669 (let ((res `(c-safe (goto-char (scan-lists ,(or pos `(point)) 1 -1)) t))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
670 (if limit |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
671 `(save-restriction |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
672 (narrow-to-region (point-min) ,limit) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
673 ,res) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
674 res))) |
44728
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
|
675 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
676 (defmacro c-go-down-list-backward (&optional pos limit) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
677 "Move the point to the last position inside the last list sexp before POS, |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
678 or before the point if POS is left out. Return t if such a position |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
679 exists, otherwise nil is returned and the point isn't moved. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
680 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
681 A limit for the search may be given. The start position is assumed to |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
682 be after it." |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
683 (let ((res `(c-safe (goto-char (scan-lists ,(or pos `(point)) -1 -1)) t))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
684 (if limit |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
685 `(save-restriction |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
686 (narrow-to-region ,limit (point-max)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
687 ,res) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
688 res))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
689 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
690 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
691 (defmacro c-beginning-of-defun-1 () |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
692 ;; Wrapper around beginning-of-defun. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
693 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
694 ;; NOTE: This function should contain the only explicit use of |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
695 ;; beginning-of-defun in CC Mode. Eventually something better than |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
696 ;; b-o-d will be available and this should be the only place the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
697 ;; code needs to change. Everything else should use |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
698 ;; (c-beginning-of-defun-1) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
699 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
700 ;; This is really a bit too large to be a macro but that isn't a |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
701 ;; problem as long as it only is used in one place in |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
702 ;; `c-parse-state'. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
703 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
704 `(progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
705 (if (and ,(cc-bytecomp-fboundp 'buffer-syntactic-context-depth) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
706 c-enable-xemacs-performance-kludge-p) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
707 ,(when (cc-bytecomp-fboundp 'buffer-syntactic-context-depth) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
708 ;; XEmacs only. This can improve the performance of |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
709 ;; c-parse-state to between 3 and 60 times faster when |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
710 ;; braces are hung. It can also degrade performance by |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
711 ;; about as much when braces are not hung. |
77081
e8bd3e011b64
Changes to make `narrow-to-defun' and `mark-defun' work properly in CC
Alan Mackenzie <acm@muc.de>
parents:
75515
diff
changeset
|
712 '(let (beginning-of-defun-function end-of-defun-function |
e8bd3e011b64
Changes to make `narrow-to-defun' and `mark-defun' work properly in CC
Alan Mackenzie <acm@muc.de>
parents:
75515
diff
changeset
|
713 pos) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
714 (while (not pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
715 (save-restriction |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
716 (widen) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
717 (setq pos (c-safe-scan-lists |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
718 (point) -1 (buffer-syntactic-context-depth)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
719 (cond |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
720 ((bobp) (setq pos (point-min))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
721 ((not pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
722 (let ((distance (skip-chars-backward "^{"))) |
80055
1f1aee9ec35e
*** empty log message ***
Juanma Barranquero <lekktu@gmail.com>
parents:
79951
diff
changeset
|
723 ;; unbalanced parenthesis, while invalid C code, |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
724 ;; shouldn't cause an infloop! See unbal.c |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
725 (when (zerop distance) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
726 ;; Punt! |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
727 (beginning-of-defun) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
728 (setq pos (point))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
729 ((= pos 0)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
730 ((not (eq (char-after pos) ?{)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
731 (goto-char pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
732 (setq pos nil)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
733 )) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
734 (goto-char pos))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
735 ;; Emacs, which doesn't have buffer-syntactic-context-depth |
77081
e8bd3e011b64
Changes to make `narrow-to-defun' and `mark-defun' work properly in CC
Alan Mackenzie <acm@muc.de>
parents:
75515
diff
changeset
|
736 (let (beginning-of-defun-function end-of-defun-function) |
e8bd3e011b64
Changes to make `narrow-to-defun' and `mark-defun' work properly in CC
Alan Mackenzie <acm@muc.de>
parents:
75515
diff
changeset
|
737 (beginning-of-defun))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
738 ;; if defun-prompt-regexp is non-nil, b-o-d won't leave us at the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
739 ;; open brace. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
740 (and defun-prompt-regexp |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
741 (looking-at defun-prompt-regexp) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
742 (goto-char (match-end 0))))) |
36920 | 743 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
744 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
745 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
75515
b48c6cc5f648
(c-emacs-features): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
75347
diff
changeset
|
746 ;; V i r t u a l S e m i c o l o n s |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
747 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
748 ;; In most CC Mode languages, statements are terminated explicitly by |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
749 ;; semicolons or closing braces. In some of the CC modes (currently only AWK |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
750 ;; Mode (April 2004)), statements are (or can be) terminated by EOLs. Such a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
751 ;; statement is said to be terminated by a "virtual semicolon" (VS). A |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
752 ;; statement terminated by an actual semicolon or brace is never considered to |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
753 ;; have a VS. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
754 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
755 ;; The indentation engine (or whatever) tests for a VS at a specific position |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
756 ;; by invoking the macro `c-at-vsemi-p', which in its turn calls the mode |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
757 ;; specific function (if any) which is the value of the language variable |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
758 ;; `c-at-vsemi-p-fn'. The actual details of what constitutes a VS in a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
759 ;; language are thus encapsulated in code specific to that language |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
760 ;; (e.g. cc-awk.el). `c-at-vsemi-p' returns non-nil if point (or the optional |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
761 ;; parameter POS) is at a VS, nil otherwise. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
762 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
763 ;; The language specific function might well do extensive analysis of the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
764 ;; source text, and may use a cacheing scheme to speed up repeated calls. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
765 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
766 ;; The "virtual semicolon" lies just after the last non-ws token on the line. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
767 ;; Like POINT, it is considered to lie between two characters. For example, |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
768 ;; at the place shown in the following AWK source line: |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
769 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
770 ;; kbyte = 1024 # 1000 if you're not picky |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
771 ;; ^ |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
772 ;; | |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
773 ;; Virtual Semicolon |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
774 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
775 ;; In addition to `c-at-vsemi-p-fn', a mode may need to supply a function for |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
776 ;; `c-vsemi-status-unknown-p-fn'. The macro `c-vsemi-status-unknown-p' is a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
777 ;; rather recondite kludge. It exists because the function |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
778 ;; `c-beginning-of-statement-1' sometimes tests for VSs as an optimisation, |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
779 ;; but `c-at-vsemi-p' might well need to call `c-beginning-of-statement-1' in |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
780 ;; its calculations, thus potentially leading to infinite recursion. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
781 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
782 ;; The macro `c-vsemi-status-unknown-p' resolves this problem; it may return |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
783 ;; non-nil at any time; returning nil is a guarantee that an immediate |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
784 ;; invocation of `c-at-vsemi-p' at point will NOT call |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
785 ;; `c-beginning-of-statement-1'. `c-vsemi-status-unknown-p' may not itself |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
786 ;; call `c-beginning-of-statement-1'. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
787 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
788 ;; The macro `c-vsemi-status-unknown-p' will typically check the cacheing |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
789 ;; scheme used by the `c-at-vsemi-p-fn', hence the name - the status is |
75515
b48c6cc5f648
(c-emacs-features): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
75347
diff
changeset
|
790 ;; "unknown" if there is no cache entry current for the line. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
791 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
792 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
793 (defmacro c-at-vsemi-p (&optional pos) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
794 ;; Is there a virtual semicolon (not a real one or a }) at POS (defaults to |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
795 ;; point)? Always returns nil for languages which don't have Virtual |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
796 ;; semicolons. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
797 ;; This macro might do hidden buffer changes. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
798 `(if c-at-vsemi-p-fn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
799 (funcall c-at-vsemi-p-fn ,@(if pos `(,pos))))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
800 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
801 (defmacro c-vsemi-status-unknown-p () |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
802 ;; Return NIL only if it can be guaranteed that an immediate |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
803 ;; (c-at-vsemi-p) will NOT call c-beginning-of-statement-1. Otherwise, |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
804 ;; return non-nil. (See comments above). The function invoked by this |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
805 ;; macro MUST NOT UNDER ANY CIRCUMSTANCES itself call |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
806 ;; c-beginning-of-statement-1. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
807 ;; Languages which don't have EOL terminated statements always return NIL |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
808 ;; (they _know_ there's no vsemi ;-). |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
809 `(if c-vsemi-status-unknown-p-fn (funcall c-vsemi-status-unknown-p-fn))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
810 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
811 |
44728
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
|
812 (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
|
813 ;; 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
|
814 ;; `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
|
815 `(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
|
816 (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
|
817 (ding))) |
36920 | 818 |
819 (defmacro c-with-syntax-table (table &rest code) | |
820 ;; Temporarily switches to the specified syntax table in a failsafe | |
821 ;; way to execute code. | |
822 `(let ((c-with-syntax-table-orig-table (syntax-table))) | |
823 (unwind-protect | |
824 (progn | |
825 (set-syntax-table ,table) | |
826 ,@code) | |
827 (set-syntax-table c-with-syntax-table-orig-table)))) | |
828 (put 'c-with-syntax-table 'lisp-indent-function 1) | |
829 | |
44728
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
|
830 (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
|
831 "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
|
832 This function skips over horizontal and vertical whitespace and line |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
833 continuations." |
44728
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
|
834 (if limit |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
835 `(let ((limit (or ,limit (point-max)))) |
44728
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
|
836 (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
|
837 ;; skip-syntax-* doesn't count \n as whitespace.. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
838 (skip-chars-forward " \t\n\r\f\v" limit) |
44728
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
|
839 (when (and (eq (char-after) ?\\) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
840 (< (point) limit)) |
44728
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
|
841 (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
|
842 (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
|
843 (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
|
844 '(while (progn |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
845 (skip-chars-forward " \t\n\r\f\v") |
44728
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
|
846 (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
|
847 (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
|
848 (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
|
849 (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
|
850 |
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
|
851 (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
|
852 "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
|
853 This function skips over horizontal and vertical whitespace and line |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
854 continuations." |
44728
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
|
855 (if limit |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
856 `(let ((limit (or ,limit (point-min)))) |
44728
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
|
857 (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
|
858 ;; skip-syntax-* doesn't count \n as whitespace.. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
859 (skip-chars-backward " \t\n\r\f\v" limit) |
44728
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
|
860 (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
|
861 (eq (char-before) ?\\) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
862 (> (point) limit))) |
44728
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
|
863 (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
|
864 '(while (progn |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
865 (skip-chars-backward " \t\n\r\f\v") |
44728
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
|
866 (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
|
867 (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
|
868 (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
|
869 |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
870 (eval-and-compile |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
871 (defvar c-langs-are-parametric nil)) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
872 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
873 (defmacro c-major-mode-is (mode) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
874 "Return non-nil if the current CC Mode major mode is MODE. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
875 MODE is either a mode symbol or a list of mode symbols." |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
876 |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
877 (if c-langs-are-parametric |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
878 ;; Inside a `c-lang-defconst'. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
879 `(c-lang-major-mode-is ,mode) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
880 |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
881 (if (eq (car-safe mode) 'quote) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
882 (let ((mode (eval mode))) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
883 (if (listp mode) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
884 `(memq c-buffer-is-cc-mode ',mode) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
885 `(eq c-buffer-is-cc-mode ',mode))) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
886 |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
887 `(let ((mode ,mode)) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
888 (if (listp mode) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
889 (memq c-buffer-is-cc-mode mode) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
890 (eq c-buffer-is-cc-mode mode)))))) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
891 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
892 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
893 ;; Macros/functions to handle so-called "char properties", which are |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
894 ;; properties set on a single character and that never spread to any |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
895 ;; other characters. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
896 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
897 (eval-and-compile |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
898 ;; Constant used at compile time to decide whether or not to use |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
899 ;; XEmacs extents. Check all the extent functions we'll use since |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
900 ;; some packages might add compatibility aliases for some of them in |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
901 ;; Emacs. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
902 (defconst c-use-extents (and (cc-bytecomp-fboundp 'extent-at) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
903 (cc-bytecomp-fboundp 'set-extent-property) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
904 (cc-bytecomp-fboundp 'set-extent-properties) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
905 (cc-bytecomp-fboundp 'make-extent) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
906 (cc-bytecomp-fboundp 'extent-property) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
907 (cc-bytecomp-fboundp 'delete-extent) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
908 (cc-bytecomp-fboundp 'map-extents)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
909 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
910 ;; `c-put-char-property' is complex enough in XEmacs and Emacs < 21 to |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
911 ;; make it a function. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
912 (defalias 'c-put-char-property-fun |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
913 (cc-eval-when-compile |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
914 (cond (c-use-extents |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
915 ;; XEmacs. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
916 (byte-compile |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
917 (lambda (pos property value) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
918 (let ((ext (extent-at pos nil property))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
919 (if ext |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
920 (set-extent-property ext property value) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
921 (set-extent-properties (make-extent pos (1+ pos)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
922 (cons property |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
923 (cons value |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
924 '(start-open t |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
925 end-open t))))))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
926 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
927 ((not (cc-bytecomp-boundp 'text-property-default-nonsticky)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
928 ;; In Emacs < 21 we have to mess with the `rear-nonsticky' property. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
929 (byte-compile |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
930 (lambda (pos property value) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
931 (put-text-property pos (1+ pos) property value) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
932 (let ((prop (get-text-property pos 'rear-nonsticky))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
933 (or (memq property prop) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
934 (put-text-property pos (1+ pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
935 'rear-nonsticky |
99660
ae9eb12f2b81
(c-put-char-property-fun): Add fallback definition of 'ignore, rather
Glenn Morris <rgm@gnu.org>
parents:
99433
diff
changeset
|
936 (cons property prop))))))) |
ae9eb12f2b81
(c-put-char-property-fun): Add fallback definition of 'ignore, rather
Glenn Morris <rgm@gnu.org>
parents:
99433
diff
changeset
|
937 ;; This won't be used for anything. |
ae9eb12f2b81
(c-put-char-property-fun): Add fallback definition of 'ignore, rather
Glenn Morris <rgm@gnu.org>
parents:
99433
diff
changeset
|
938 (t 'ignore)))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
939 (cc-bytecomp-defun c-put-char-property-fun) ; Make it known below. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
940 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
941 (defmacro c-put-char-property (pos property value) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
942 ;; Put the given property with the given value on the character at |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
943 ;; POS and make it front and rear nonsticky, or start and end open |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
944 ;; in XEmacs vocabulary. If the character already has the given |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
945 ;; property then the value is replaced, and the behavior is |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
946 ;; undefined if that property has been put by some other function. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
947 ;; PROPERTY is assumed to be constant. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
948 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
949 ;; If there's a `text-property-default-nonsticky' variable (Emacs |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
950 ;; 21) then it's assumed that the property is present on it. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
951 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
952 ;; This macro does a hidden buffer change. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
953 (setq property (eval property)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
954 (if (or c-use-extents |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
955 (not (cc-bytecomp-boundp 'text-property-default-nonsticky))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
956 ;; XEmacs and Emacs < 21. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
957 `(c-put-char-property-fun ,pos ',property ,value) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
958 ;; In Emacs 21 we got the `rear-nonsticky' property covered |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
959 ;; by `text-property-default-nonsticky'. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
960 `(let ((-pos- ,pos)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
961 (put-text-property -pos- (1+ -pos-) ',property ,value)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
962 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
963 (defmacro c-get-char-property (pos property) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
964 ;; Get the value of the given property on the character at POS if |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
965 ;; it's been put there by `c-put-char-property'. PROPERTY is |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
966 ;; assumed to be constant. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
967 (setq property (eval property)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
968 (if c-use-extents |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
969 ;; XEmacs. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
970 `(let ((ext (extent-at ,pos nil ',property))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
971 (if ext (extent-property ext ',property))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
972 ;; Emacs. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
973 `(get-text-property ,pos ',property))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
974 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
975 ;; `c-clear-char-property' is complex enough in Emacs < 21 to make it |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
976 ;; a function, since we have to mess with the `rear-nonsticky' property. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
977 (defalias 'c-clear-char-property-fun |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
978 (cc-eval-when-compile |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
979 (unless (or c-use-extents |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
980 (cc-bytecomp-boundp 'text-property-default-nonsticky)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
981 (byte-compile |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
982 (lambda (pos property) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
983 (when (get-text-property pos property) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
984 (remove-text-properties pos (1+ pos) (list property nil)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
985 (put-text-property pos (1+ pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
986 'rear-nonsticky |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
987 (delq property (get-text-property |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
988 pos 'rear-nonsticky))))))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
989 (cc-bytecomp-defun c-clear-char-property-fun) ; Make it known below. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
990 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
991 (defmacro c-clear-char-property (pos property) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
992 ;; Remove the given property on the character at POS if it's been put |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
993 ;; there by `c-put-char-property'. PROPERTY is assumed to be |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
994 ;; constant. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
995 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
996 ;; This macro does a hidden buffer change. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
997 (setq property (eval property)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
998 (cond (c-use-extents |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
999 ;; XEmacs. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1000 `(let ((ext (extent-at ,pos nil ',property))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1001 (if ext (delete-extent ext)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1002 ((cc-bytecomp-boundp 'text-property-default-nonsticky) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1003 ;; In Emacs 21 we got the `rear-nonsticky' property covered |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1004 ;; by `text-property-default-nonsticky'. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1005 `(let ((pos ,pos)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1006 (remove-text-properties pos (1+ pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1007 '(,property nil)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1008 (t |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1009 ;; Emacs < 21. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1010 `(c-clear-char-property-fun ,pos ',property)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1011 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1012 (defmacro c-clear-char-properties (from to property) |
106837
855f55740303
Fix typos in comments.
Juanma Barranquero <lekktu@gmail.com>
parents:
106815
diff
changeset
|
1013 ;; Remove all the occurrences of the given property in the given |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1014 ;; region that has been put with `c-put-char-property'. PROPERTY is |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1015 ;; assumed to be constant. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1016 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1017 ;; Note that this function does not clean up the property from the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1018 ;; lists of the `rear-nonsticky' properties in the region, if such |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1019 ;; are used. Thus it should not be used for common properties like |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1020 ;; `syntax-table'. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1021 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1022 ;; This macro does hidden buffer changes. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1023 (setq property (eval property)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1024 (if c-use-extents |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1025 ;; XEmacs. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1026 `(map-extents (lambda (ext ignored) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1027 (delete-extent ext)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1028 nil ,from ,to nil nil ',property) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1029 ;; Emacs. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1030 `(remove-text-properties ,from ,to '(,property nil)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1031 |
107086
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1032 (defmacro c-search-forward-char-property (property value &optional limit) |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1033 "Search forward for a text-property PROPERTY having value VALUE. |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1034 LIMIT bounds the search. The comparison is done with `equal'. |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1035 |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1036 Leave point just after the character, and set the match data on |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1037 this character, and return point. If VALUE isn't found, Return |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1038 nil; point is then left undefined." |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1039 `(let ((place (point))) |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1040 (while |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1041 (and |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1042 (< place ,(or limit '(point-max))) |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1043 (not (equal (get-text-property place ,property) ,value))) |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1044 (setq place (next-single-property-change |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1045 place ,property nil ,(or limit '(point-max))))) |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1046 (when (< place ,(or limit '(point-max))) |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1047 (goto-char place) |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1048 (search-forward-regexp ".") ; to set the match-data. |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1049 (point)))) |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1050 |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1051 (defmacro c-search-backward-char-property (property value &optional limit) |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1052 "Search backward for a text-property PROPERTY having value VALUE. |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1053 LIMIT bounds the search. The comparison is done with `equal'. |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1054 |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1055 Leave point just before the character, set the match data on this |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1056 character, and return point. If VALUE isn't found, Return nil; |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1057 point is then left undefined." |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1058 `(let ((place (point))) |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1059 (while |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1060 (and |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1061 (> place ,(or limit '(point-min))) |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1062 (not (equal (get-text-property (1- place) ,property) ,value))) |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1063 (setq place (previous-single-property-change |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1064 place ,property nil ,(or limit '(point-min))))) |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1065 (when (> place ,(or limit '(point-max))) |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1066 (goto-char place) |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1067 (search-backward-regexp ".") ; to set the match-data. |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1068 (point)))) |
1786f2e6a856
Change strategy for marking < and > as template delimiters: mark them
Alan Mackenzie <acm@muc.de>
parents:
106911
diff
changeset
|
1069 |
80156
fa9371f081be
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
80055
diff
changeset
|
1070 (defun c-clear-char-property-with-value-function (from to property value) |
fa9371f081be
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
80055
diff
changeset
|
1071 "Remove all text-properties PROPERTY from the region (FROM, TO) |
fa9371f081be
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
80055
diff
changeset
|
1072 which have the value VALUE, as tested by `equal'. These |
fa9371f081be
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
80055
diff
changeset
|
1073 properties are assumed to be over individual characters, having |
fa9371f081be
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
80055
diff
changeset
|
1074 been put there by c-put-char-property. POINT remains unchanged." |
fa9371f081be
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
80055
diff
changeset
|
1075 (let ((place from) end-place) |
106837
855f55740303
Fix typos in comments.
Juanma Barranquero <lekktu@gmail.com>
parents:
106815
diff
changeset
|
1076 (while ; loop round occurrences of (PROPERTY VALUE) |
80156
fa9371f081be
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
80055
diff
changeset
|
1077 (progn |
fa9371f081be
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
80055
diff
changeset
|
1078 (while ; loop round changes in PROPERTY till we find VALUE |
fa9371f081be
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
80055
diff
changeset
|
1079 (and |
fa9371f081be
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
80055
diff
changeset
|
1080 (< place to) |
fa9371f081be
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
80055
diff
changeset
|
1081 (not (equal (get-text-property place property) value))) |
fa9371f081be
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
80055
diff
changeset
|
1082 (setq place (next-single-property-change place property nil to))) |
fa9371f081be
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
80055
diff
changeset
|
1083 (< place to)) |
fa9371f081be
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
80055
diff
changeset
|
1084 (setq end-place (next-single-property-change place property nil to)) |
fa9371f081be
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
80055
diff
changeset
|
1085 (put-text-property place end-place property nil) |
fa9371f081be
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
80055
diff
changeset
|
1086 ;; Do we have to do anything with stickiness here? |
fa9371f081be
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
80055
diff
changeset
|
1087 (setq place end-place)))) |
fa9371f081be
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
80055
diff
changeset
|
1088 |
fa9371f081be
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
80055
diff
changeset
|
1089 (defmacro c-clear-char-property-with-value (from to property value) |
fa9371f081be
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
80055
diff
changeset
|
1090 "Remove all text-properties PROPERTY from the region [FROM, TO) |
fa9371f081be
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
80055
diff
changeset
|
1091 which have the value VALUE, as tested by `equal'. These |
fa9371f081be
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
80055
diff
changeset
|
1092 properties are assumed to be over individual characters, having |
fa9371f081be
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
80055
diff
changeset
|
1093 been put there by c-put-char-property. POINT remains unchanged." |
fa9371f081be
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
80055
diff
changeset
|
1094 (if c-use-extents |
fa9371f081be
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
80055
diff
changeset
|
1095 ;; XEmacs |
fa9371f081be
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
80055
diff
changeset
|
1096 `(let ((-property- ,property)) |
fa9371f081be
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
80055
diff
changeset
|
1097 (map-extents (lambda (ext val) |
fa9371f081be
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
80055
diff
changeset
|
1098 (if (equal (extent-property ext -property-) val) |
fa9371f081be
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
80055
diff
changeset
|
1099 (delete-extent ext))) |
fa9371f081be
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
80055
diff
changeset
|
1100 nil ,from ,to ,value nil -property-)) |
fa9371f081be
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
80055
diff
changeset
|
1101 ;; Gnu Emacs |
fa9371f081be
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
80055
diff
changeset
|
1102 `(c-clear-char-property-with-value-function ,from ,to ,property ,value))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1103 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1104 ;; Macros to put overlays (Emacs) or extents (XEmacs) on buffer text. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1105 ;; For our purposes, these are characterized by being possible to |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1106 ;; remove again without affecting the other text properties in the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1107 ;; buffer that got overridden when they were put. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1108 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1109 (defmacro c-put-overlay (from to property value) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1110 ;; Put an overlay/extent covering the given range in the current |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1111 ;; buffer. It's currently undefined whether it's front/end sticky |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1112 ;; or not. The overlay/extent object is returned. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1113 (if (cc-bytecomp-fboundp 'make-overlay) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1114 ;; Emacs. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1115 `(let ((ol (make-overlay ,from ,to))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1116 (overlay-put ol ,property ,value) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1117 ol) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1118 ;; XEmacs. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1119 `(let ((ext (make-extent ,from ,to))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1120 (set-extent-property ext ,property ,value) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1121 ext))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1122 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1123 (defmacro c-delete-overlay (overlay) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1124 ;; Deletes an overlay/extent object previously retrieved using |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1125 ;; `c-put-overlay'. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1126 (if (cc-bytecomp-fboundp 'make-overlay) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1127 ;; Emacs. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1128 `(delete-overlay ,overlay) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1129 ;; XEmacs. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1130 `(delete-extent ,overlay))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1131 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1132 |
44728
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
|
1133 ;; Make edebug understand the macros. |
71754
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
1134 ;(eval-after-load "edebug" ; 2006-07-09: def-edebug-spec is now in subr.el. |
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
1135 ; '(progn |
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
1136 (def-edebug-spec cc-eval-when-compile t) |
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
1137 (def-edebug-spec c-point t) |
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
1138 (def-edebug-spec c-set-region-active t) |
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
1139 (def-edebug-spec c-safe t) |
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
1140 (def-edebug-spec c-save-buffer-state let*) |
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
1141 (def-edebug-spec c-tentative-buffer-changes t) |
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
1142 (def-edebug-spec c-forward-syntactic-ws t) |
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
1143 (def-edebug-spec c-backward-syntactic-ws t) |
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
1144 (def-edebug-spec c-forward-sexp t) |
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
1145 (def-edebug-spec c-backward-sexp t) |
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
1146 (def-edebug-spec c-up-list-forward t) |
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
1147 (def-edebug-spec c-up-list-backward t) |
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
1148 (def-edebug-spec c-down-list-forward t) |
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
1149 (def-edebug-spec c-down-list-backward t) |
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
1150 (def-edebug-spec c-add-syntax t) |
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
1151 (def-edebug-spec c-add-class-syntax t) |
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
1152 (def-edebug-spec c-benign-error t) |
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
1153 (def-edebug-spec c-with-syntax-table t) |
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
1154 (def-edebug-spec c-skip-ws-forward t) |
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
1155 (def-edebug-spec c-skip-ws-backward t) |
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
1156 (def-edebug-spec c-major-mode-is t) |
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
1157 (def-edebug-spec c-put-char-property t) |
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
1158 (def-edebug-spec c-get-char-property t) |
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
1159 (def-edebug-spec c-clear-char-property t) |
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
1160 (def-edebug-spec c-clear-char-properties t) |
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
1161 (def-edebug-spec c-put-overlay t) |
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
1162 (def-edebug-spec c-delete-overlay 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:
38422
diff
changeset
|
1163 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1164 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1165 ;;; Functions. |
36920 | 1166 |
1167 ;; Note: All these after the macros, to be on safe side in avoiding | |
1168 ;; bugs where macros are defined too late. These bugs often only show | |
1169 ;; when the files are compiled in a certain order within the same | |
1170 ;; session. | |
1171 | |
26817 | 1172 (defsubst c-end-of-defun-1 () |
1173 ;; 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
|
1174 (let ((start (point))) |
3393922ea102
(c-end-of-defun-1): Fixed forward scanning into
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
1175 ;; 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
|
1176 ;; 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
|
1177 ;; anyway. |
3393922ea102
(c-end-of-defun-1): Fixed forward scanning into
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
1178 (skip-chars-forward "^}") |
3393922ea102
(c-end-of-defun-1): Fixed forward scanning into
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
1179 (c-beginning-of-defun-1) |
3393922ea102
(c-end-of-defun-1): Fixed forward scanning into
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
1180 (if (eq (char-after) ?{) |
3393922ea102
(c-end-of-defun-1): Fixed forward scanning into
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
1181 (c-forward-sexp)) |
3393922ea102
(c-end-of-defun-1): Fixed forward scanning into
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
1182 (if (< (point) start) |
3393922ea102
(c-end-of-defun-1): Fixed forward scanning into
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
1183 (goto-char (point-max))))) |
18720 | 1184 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1185 (defconst c-<-as-paren-syntax '(4 . ?>)) |
106395
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1186 (put 'c-<-as-paren-syntax 'syntax-table c-<-as-paren-syntax) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1187 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1188 (defsubst c-mark-<-as-paren (pos) |
106395
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1189 ;; Mark the "<" character at POS as a template opener using the |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1190 ;; `syntax-table' property via the `category' property. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1191 ;; |
106395
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1192 ;; This function does a hidden buffer change. Note that we use |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1193 ;; indirection through the `category' text property. This allows us to |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1194 ;; toggle the property in all template brackets simultaneously and |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1195 ;; cheaply. We use this, for instance, in `c-parse-state'. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1196 (c-put-char-property pos 'category 'c-<-as-paren-syntax)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1197 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1198 (defconst c->-as-paren-syntax '(5 . ?<)) |
106395
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1199 (put 'c->-as-paren-syntax 'syntax-table c->-as-paren-syntax) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1200 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1201 (defsubst c-mark->-as-paren (pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1202 ;; Mark the ">" character at POS as an sexp list closer using the |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1203 ;; syntax-table property. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1204 ;; |
106395
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1205 ;; This function does a hidden buffer change. Note that we use |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1206 ;; indirection through the `category' text property. This allows us to |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1207 ;; toggle the property in all template brackets simultaneously and |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1208 ;; cheaply. We use this, for instance, in `c-parse-state'. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1209 (c-put-char-property pos 'category 'c->-as-paren-syntax)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1210 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1211 (defsubst c-unmark-<->-as-paren (pos) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1212 ;; Unmark the "<" or "<" character at POS as an sexp list opener using |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1213 ;; the syntax-table property indirectly through the `category' text |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1214 ;; property. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1215 ;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1216 ;; This function does a hidden buffer change. Note that we use |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1217 ;; indirection through the `category' text property. This allows us to |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1218 ;; toggle the property in all template brackets simultaneously and |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1219 ;; cheaply. We use this, for instance, in `c-parse-state'. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1220 (c-clear-char-property pos 'category)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1221 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1222 (defsubst c-suppress-<->-as-parens () |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1223 ;; Suppress the syntactic effect of all marked < and > as parens. Note |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1224 ;; that this effect is NOT buffer local. You should probably not use |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1225 ;; this directly, but only through the macro |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1226 ;; `c-with-<->-as-parens-suppressed' |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1227 (put 'c-<-as-paren-syntax 'syntax-table nil) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1228 (put 'c->-as-paren-syntax 'syntax-table nil)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1229 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1230 (defsubst c-restore-<->-as-parens () |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1231 ;; Restore the syntactic effect of all marked <s and >s as parens. This |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1232 ;; has no effect on unmarked <s and >s |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1233 (put 'c-<-as-paren-syntax 'syntax-table c-<-as-paren-syntax) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1234 (put 'c->-as-paren-syntax 'syntax-table c->-as-paren-syntax)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1235 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1236 (defmacro c-with-<->-as-parens-suppressed (&rest forms) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1237 ;; Like progn, except that the paren property is suppressed on all |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1238 ;; template brackets whilst they are running. This macro does a hidden |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1239 ;; buffer change. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1240 `(unwind-protect |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1241 (progn |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1242 (c-suppress-<->-as-parens) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1243 ,@forms) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1244 (c-restore-<->-as-parens))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1245 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1246 ;;;;;;;;;;;;;;; |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1247 |
106395
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1248 (defconst c-cpp-delimiter '(14)) ; generic comment syntax |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1249 ;; This is the value of the `category' text property placed on every # |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1250 ;; which introduces a CPP construct and every EOL (or EOB, or character |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1251 ;; preceding //, etc.) which terminates it. We can instantly "comment |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1252 ;; out" all CPP constructs by giving `c-cpp-delimiter' a syntax-table |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1253 ;; propery '(14) (generic comment delimiter). |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1254 (defmacro c-set-cpp-delimiters (beg end) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1255 ;; This macro does a hidden buffer change. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1256 `(progn |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1257 (c-put-char-property ,beg 'category 'c-cpp-delimiter) |
106911
497e3aa2f614
Fix bug#5395: typing '#' in an empty C buffer throws "args out of range".
Alan Mackenzie <acm@muc.de>
parents:
106837
diff
changeset
|
1258 (if (< ,end (point-max)) |
497e3aa2f614
Fix bug#5395: typing '#' in an empty C buffer throws "args out of range".
Alan Mackenzie <acm@muc.de>
parents:
106837
diff
changeset
|
1259 (c-put-char-property ,end 'category 'c-cpp-delimiter)))) |
106395
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1260 (defmacro c-clear-cpp-delimiters (beg end) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1261 ;; This macro does a hidden buffer change. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1262 `(progn |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1263 (c-clear-char-property ,beg 'category) |
106911
497e3aa2f614
Fix bug#5395: typing '#' in an empty C buffer throws "args out of range".
Alan Mackenzie <acm@muc.de>
parents:
106837
diff
changeset
|
1264 (if (< ,end (point-max)) |
497e3aa2f614
Fix bug#5395: typing '#' in an empty C buffer throws "args out of range".
Alan Mackenzie <acm@muc.de>
parents:
106837
diff
changeset
|
1265 (c-clear-char-property ,end 'category)))) |
106395
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1266 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1267 (defsubst c-comment-out-cpps () |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1268 ;; Render all preprocessor constructs syntactically commented out. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1269 (put 'c-cpp-delimiter 'syntax-table c-cpp-delimiter)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1270 (defsubst c-uncomment-out-cpps () |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1271 ;; Restore the syntactic visibility of preprocessor constructs. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1272 (put 'c-cpp-delimiter 'syntax-table nil)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1273 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1274 (defmacro c-with-cpps-commented-out (&rest forms) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1275 ;; Execute FORMS... whilst the syntactic effect of all characters in |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1276 ;; all CPP regions is suppressed. In particular, this is to suppress |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1277 ;; the syntactic significance of parens/braces/brackets to functions |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1278 ;; such as `scan-lists' and `parse-partial-sexp'. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1279 `(unwind-protect |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1280 (c-save-buffer-state () |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1281 (c-comment-out-cpps) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1282 ,@forms) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1283 (c-save-buffer-state () |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1284 (c-uncomment-out-cpps)))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1285 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1286 (defmacro c-with-all-but-one-cpps-commented-out (beg end &rest forms) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1287 ;; Execute FORMS... whilst the syntactic effect of all characters in |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1288 ;; every CPP region APART FROM THE ONE BETWEEN BEG and END is |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1289 ;; suppressed. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1290 `(unwind-protect |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1291 (c-save-buffer-state () |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1292 (c-clear-cpp-delimiters ,beg ,end) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1293 ,`(c-with-cpps-commented-out ,@forms)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1294 (c-save-buffer-state () |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1295 (c-set-cpp-delimiters ,beg ,end)))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
106101
diff
changeset
|
1296 |
18720 | 1297 (defsubst c-intersect-lists (list alist) |
1298 ;; return the element of ALIST that matches the first element found | |
1299 ;; in LIST. Uses assq. | |
1300 (let (match) | |
1301 (while (and list | |
1302 (not (setq match (assq (car list) alist)))) | |
1303 (setq list (cdr list))) | |
1304 match)) | |
1305 | |
1306 (defsubst c-lookup-lists (list alist1 alist2) | |
1307 ;; first, find the first entry from LIST that is present in ALIST1, | |
1308 ;; then find the entry in ALIST2 for that entry. | |
1309 (assq (car (c-intersect-lists list alist1)) alist2)) | |
1310 | |
51948
b881031be46c
(c-langelem-sym, c-langelem-pos, c-langelem-2nd-pos): Added accessor
Martin Stjernholm <mast@lysator.liu.se>
parents:
51887
diff
changeset
|
1311 (defsubst c-langelem-sym (langelem) |
b881031be46c
(c-langelem-sym, c-langelem-pos, c-langelem-2nd-pos): Added accessor
Martin Stjernholm <mast@lysator.liu.se>
parents:
51887
diff
changeset
|
1312 "Return the syntactic symbol in LANGELEM. |
b881031be46c
(c-langelem-sym, c-langelem-pos, c-langelem-2nd-pos): Added accessor
Martin Stjernholm <mast@lysator.liu.se>
parents:
51887
diff
changeset
|
1313 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1314 LANGELEM is either a cons cell on the \"old\" form given as the first |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1315 argument to lineup functions or a syntactic element on the \"new\" |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1316 form as used in `c-syntactic-element'." |
51948
b881031be46c
(c-langelem-sym, c-langelem-pos, c-langelem-2nd-pos): Added accessor
Martin Stjernholm <mast@lysator.liu.se>
parents:
51887
diff
changeset
|
1317 (car langelem)) |
b881031be46c
(c-langelem-sym, c-langelem-pos, c-langelem-2nd-pos): Added accessor
Martin Stjernholm <mast@lysator.liu.se>
parents:
51887
diff
changeset
|
1318 |
b881031be46c
(c-langelem-sym, c-langelem-pos, c-langelem-2nd-pos): Added accessor
Martin Stjernholm <mast@lysator.liu.se>
parents:
51887
diff
changeset
|
1319 (defsubst c-langelem-pos (langelem) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1320 "Return the anchor position in LANGELEM, or nil if there is none. |
51948
b881031be46c
(c-langelem-sym, c-langelem-pos, c-langelem-2nd-pos): Added accessor
Martin Stjernholm <mast@lysator.liu.se>
parents:
51887
diff
changeset
|
1321 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1322 LANGELEM is either a cons cell on the \"old\" form given as the first |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1323 argument to lineup functions or a syntactic element on the \"new\" |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1324 form as used in `c-syntactic-element'." |
51948
b881031be46c
(c-langelem-sym, c-langelem-pos, c-langelem-2nd-pos): Added accessor
Martin Stjernholm <mast@lysator.liu.se>
parents:
51887
diff
changeset
|
1325 (if (consp (cdr langelem)) |
b881031be46c
(c-langelem-sym, c-langelem-pos, c-langelem-2nd-pos): Added accessor
Martin Stjernholm <mast@lysator.liu.se>
parents:
51887
diff
changeset
|
1326 (car-safe (cdr langelem)) |
b881031be46c
(c-langelem-sym, c-langelem-pos, c-langelem-2nd-pos): Added accessor
Martin Stjernholm <mast@lysator.liu.se>
parents:
51887
diff
changeset
|
1327 (cdr langelem))) |
b881031be46c
(c-langelem-sym, c-langelem-pos, c-langelem-2nd-pos): Added accessor
Martin Stjernholm <mast@lysator.liu.se>
parents:
51887
diff
changeset
|
1328 |
b881031be46c
(c-langelem-sym, c-langelem-pos, c-langelem-2nd-pos): Added accessor
Martin Stjernholm <mast@lysator.liu.se>
parents:
51887
diff
changeset
|
1329 (defun c-langelem-col (langelem &optional preserve-point) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1330 "Return the column of the anchor position in LANGELEM. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1331 Also move the point to that position unless PRESERVE-POINT is non-nil. |
51948
b881031be46c
(c-langelem-sym, c-langelem-pos, c-langelem-2nd-pos): Added accessor
Martin Stjernholm <mast@lysator.liu.se>
parents:
51887
diff
changeset
|
1332 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1333 LANGELEM is either a cons cell on the \"old\" form given as the first |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1334 argument to lineup functions or a syntactic element on the \"new\" |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1335 form as used in `c-syntactic-element'." |
51948
b881031be46c
(c-langelem-sym, c-langelem-pos, c-langelem-2nd-pos): Added accessor
Martin Stjernholm <mast@lysator.liu.se>
parents:
51887
diff
changeset
|
1336 (let ((pos (c-langelem-pos langelem)) |
b881031be46c
(c-langelem-sym, c-langelem-pos, c-langelem-2nd-pos): Added accessor
Martin Stjernholm <mast@lysator.liu.se>
parents:
51887
diff
changeset
|
1337 (here (point))) |
b881031be46c
(c-langelem-sym, c-langelem-pos, c-langelem-2nd-pos): Added accessor
Martin Stjernholm <mast@lysator.liu.se>
parents:
51887
diff
changeset
|
1338 (if pos |
b881031be46c
(c-langelem-sym, c-langelem-pos, c-langelem-2nd-pos): Added accessor
Martin Stjernholm <mast@lysator.liu.se>
parents:
51887
diff
changeset
|
1339 (progn |
b881031be46c
(c-langelem-sym, c-langelem-pos, c-langelem-2nd-pos): Added accessor
Martin Stjernholm <mast@lysator.liu.se>
parents:
51887
diff
changeset
|
1340 (goto-char pos) |
b881031be46c
(c-langelem-sym, c-langelem-pos, c-langelem-2nd-pos): Added accessor
Martin Stjernholm <mast@lysator.liu.se>
parents:
51887
diff
changeset
|
1341 (prog1 (current-column) |
b881031be46c
(c-langelem-sym, c-langelem-pos, c-langelem-2nd-pos): Added accessor
Martin Stjernholm <mast@lysator.liu.se>
parents:
51887
diff
changeset
|
1342 (if preserve-point |
b881031be46c
(c-langelem-sym, c-langelem-pos, c-langelem-2nd-pos): Added accessor
Martin Stjernholm <mast@lysator.liu.se>
parents:
51887
diff
changeset
|
1343 (goto-char here)))) |
b881031be46c
(c-langelem-sym, c-langelem-pos, c-langelem-2nd-pos): Added accessor
Martin Stjernholm <mast@lysator.liu.se>
parents:
51887
diff
changeset
|
1344 0))) |
b881031be46c
(c-langelem-sym, c-langelem-pos, c-langelem-2nd-pos): Added accessor
Martin Stjernholm <mast@lysator.liu.se>
parents:
51887
diff
changeset
|
1345 |
b881031be46c
(c-langelem-sym, c-langelem-pos, c-langelem-2nd-pos): Added accessor
Martin Stjernholm <mast@lysator.liu.se>
parents:
51887
diff
changeset
|
1346 (defsubst c-langelem-2nd-pos (langelem) |
b881031be46c
(c-langelem-sym, c-langelem-pos, c-langelem-2nd-pos): Added accessor
Martin Stjernholm <mast@lysator.liu.se>
parents:
51887
diff
changeset
|
1347 "Return the secondary position in LANGELEM, or nil if there is none. |
b881031be46c
(c-langelem-sym, c-langelem-pos, c-langelem-2nd-pos): Added accessor
Martin Stjernholm <mast@lysator.liu.se>
parents:
51887
diff
changeset
|
1348 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1349 LANGELEM is typically a syntactic element on the \"new\" form as used |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1350 in `c-syntactic-element'. It may also be a cons cell as passed in the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1351 first argument to lineup functions, but then the returned value always |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1352 will be nil." |
51948
b881031be46c
(c-langelem-sym, c-langelem-pos, c-langelem-2nd-pos): Added accessor
Martin Stjernholm <mast@lysator.liu.se>
parents:
51887
diff
changeset
|
1353 (car-safe (cdr-safe (cdr-safe langelem)))) |
18720 | 1354 |
1355 (defsubst c-keep-region-active () | |
1356 ;; Do whatever is necessary to keep the region active in XEmacs. | |
36920 | 1357 ;; This is not needed for Emacs. |
18720 | 1358 (and (boundp 'zmacs-region-stays) |
1359 (setq zmacs-region-stays t))) | |
1360 | |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1361 (put 'c-mode 'c-mode-prefix "c-") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1362 (put 'c++-mode 'c-mode-prefix "c++-") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1363 (put 'objc-mode 'c-mode-prefix "objc-") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1364 (put 'java-mode 'c-mode-prefix "java-") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1365 (put 'idl-mode 'c-mode-prefix "idl-") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1366 (put 'pike-mode 'c-mode-prefix "pike-") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1367 (put 'awk-mode 'c-mode-prefix "awk-") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1368 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1369 (defsubst c-mode-symbol (suffix) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1370 "Prefix the current mode prefix (e.g. \"c-\") to SUFFIX and return |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1371 the corresponding symbol." |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1372 (or c-buffer-is-cc-mode |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1373 (error "Not inside a CC Mode based mode")) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1374 (let ((mode-prefix (get c-buffer-is-cc-mode 'c-mode-prefix))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1375 (or mode-prefix |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1376 (error "%S has no mode prefix known to `c-mode-symbol'" |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1377 c-buffer-is-cc-mode)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1378 (intern (concat mode-prefix suffix)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1379 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1380 (defsubst c-mode-var (suffix) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1381 "Prefix the current mode prefix (e.g. \"c-\") to SUFFIX and return |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1382 the value of the variable with that name." |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1383 (symbol-value (c-mode-symbol suffix))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1384 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1385 (defsubst c-got-face-at (pos faces) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1386 "Return non-nil if position POS in the current buffer has any of the |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1387 faces in the list FACES." |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1388 (let ((pos-faces (get-text-property pos 'face))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1389 (if (consp pos-faces) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1390 (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1391 (while (and pos-faces |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1392 (not (memq (car pos-faces) faces))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1393 (setq pos-faces (cdr pos-faces))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1394 pos-faces) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1395 (memq pos-faces faces)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1396 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1397 (defsubst c-face-name-p (facename) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1398 ;; Return t if FACENAME is the name of a face. This method is |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1399 ;; necessary since facep in XEmacs only returns t for the actual |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1400 ;; face objects (while it's only their names that are used just |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1401 ;; about anywhere else) without providing a predicate that tests |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1402 ;; face names. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1403 (memq facename (face-list))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1404 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1405 (defun c-concat-separated (list separator) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1406 "Like `concat' on LIST, but separate each element with SEPARATOR. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1407 Notably, null elements in LIST are ignored." |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1408 (mapconcat 'identity (delete nil (append list nil)) separator)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1409 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1410 (defun c-make-keywords-re (adorn list &optional mode) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1411 "Make a regexp that matches all the strings the list. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1412 Duplicates and nil elements in the list are removed. The resulting |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1413 regexp may contain zero or more submatch expressions. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1414 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1415 If ADORN is t there will be at least one submatch and the first |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1416 surrounds the matched alternative, and the regexp will also not match |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1417 a prefix of any identifier. Adorned regexps cannot be appended. The |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1418 language variable `c-nonsymbol-key' is used to make the adornment. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1419 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1420 A value 'appendable for ADORN is like above, but all alternatives in |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1421 the list that end with a word constituent char will have \\> appended |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1422 instead, so that the regexp remains appendable. Note that this |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1423 variant doesn't always guarantee that an identifier prefix isn't |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1424 matched since the symbol constituent '_' is normally considered a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1425 nonword token by \\>. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1426 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1427 The optional MODE specifies the language to get `c-nonsymbol-key' from |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1428 when it's needed. The default is the current language taken from |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1429 `c-buffer-is-cc-mode'." |
53073
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52610
diff
changeset
|
1430 |
51887
a39d64d1eb50
(c-make-keywords-re): Don't use delete-duplicates.
Richard M. Stallman <rms@gnu.org>
parents:
51829
diff
changeset
|
1431 (let (unique) |
a39d64d1eb50
(c-make-keywords-re): Don't use delete-duplicates.
Richard M. Stallman <rms@gnu.org>
parents:
51829
diff
changeset
|
1432 (dolist (elt list) |
a39d64d1eb50
(c-make-keywords-re): Don't use delete-duplicates.
Richard M. Stallman <rms@gnu.org>
parents:
51829
diff
changeset
|
1433 (unless (member elt unique) |
a39d64d1eb50
(c-make-keywords-re): Don't use delete-duplicates.
Richard M. Stallman <rms@gnu.org>
parents:
51829
diff
changeset
|
1434 (push elt unique))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1435 (setq list (delete nil unique))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1436 (if list |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1437 (let (re) |
53073
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52610
diff
changeset
|
1438 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1439 (if (eq adorn 'appendable) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1440 ;; This is kludgy but it works: Search for a string that |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1441 ;; doesn't occur in any word in LIST. Append it to all |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1442 ;; the alternatives where we want to add \>. Run through |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1443 ;; `regexp-opt' and then replace it with \>. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1444 (let ((unique "") pos) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1445 (while (let (found) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1446 (setq unique (concat unique "@") |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1447 pos list) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1448 (while (and pos |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1449 (if (string-match unique (car pos)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1450 (progn (setq found t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1451 nil) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1452 t)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1453 (setq pos (cdr pos))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1454 found)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1455 (setq pos list) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1456 (while pos |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1457 (if (string-match "\\w\\'" (car pos)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1458 (setcar pos (concat (car pos) unique))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1459 (setq pos (cdr pos))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1460 (setq re (regexp-opt list)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1461 (setq pos 0) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1462 (while (string-match unique re pos) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1463 (setq pos (+ (match-beginning 0) 2) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1464 re (replace-match "\\>" t t re)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1465 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1466 (setq re (regexp-opt list))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1467 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1468 ;; Emacs 20 and XEmacs (all versions so far) has a buggy |
53073
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52610
diff
changeset
|
1469 ;; regexp-opt that doesn't always cope with strings containing |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52610
diff
changeset
|
1470 ;; newlines. This kludge doesn't handle shy parens correctly |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52610
diff
changeset
|
1471 ;; so we can't advice regexp-opt directly with it. |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52610
diff
changeset
|
1472 (let (fail-list) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52610
diff
changeset
|
1473 (while list |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52610
diff
changeset
|
1474 (and (string-match "\n" (car list)) ; To speed it up a little. |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52610
diff
changeset
|
1475 (not (string-match (concat "\\`\\(" re "\\)\\'") |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52610
diff
changeset
|
1476 (car list))) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52610
diff
changeset
|
1477 (setq fail-list (cons (car list) fail-list))) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52610
diff
changeset
|
1478 (setq list (cdr list))) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52610
diff
changeset
|
1479 (when fail-list |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52610
diff
changeset
|
1480 (setq re (concat re |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52610
diff
changeset
|
1481 "\\|" |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1482 (mapconcat |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1483 (if (eq adorn 'appendable) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1484 (lambda (str) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1485 (if (string-match "\\w\\'" str) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1486 (concat (regexp-quote str) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1487 "\\>") |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1488 (regexp-quote str))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1489 'regexp-quote) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1490 (sort fail-list |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1491 (lambda (a b) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1492 (> (length a) (length b)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1493 "\\|"))))) |
53073
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52610
diff
changeset
|
1494 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1495 ;; Add our own grouping parenthesis around re instead of |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1496 ;; passing adorn to `regexp-opt', since in XEmacs it makes the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1497 ;; top level grouping "shy". |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1498 (cond ((eq adorn 'appendable) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1499 (concat "\\(" re "\\)")) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1500 (adorn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1501 (concat "\\(" re "\\)" |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1502 "\\(" |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1503 (c-get-lang-constant 'c-nonsymbol-key nil mode) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1504 "\\|$\\)")) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1505 (t |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1506 re))) |
53073
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52610
diff
changeset
|
1507 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1508 ;; Produce a regexp that matches nothing. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1509 (if adorn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1510 "\\(\\<\\>\\)" |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1511 "\\<\\>"))) |
53073
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52610
diff
changeset
|
1512 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1513 (put 'c-make-keywords-re 'lisp-indent-function 1) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1514 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1515 (defun c-make-bare-char-alt (chars &optional inverted) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1516 "Make a character alternative string from the list of characters CHARS. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1517 The returned string is of the type that can be used with |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1518 `skip-chars-forward' and `skip-chars-backward'. If INVERTED is |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1519 non-nil, a caret is prepended to invert the set." |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1520 ;; This function ought to be in the elisp core somewhere. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1521 (let ((str (if inverted "^" "")) char char2) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1522 (setq chars (sort (append chars nil) `<)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1523 (while chars |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1524 (setq char (pop chars)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1525 (if (memq char '(?\\ ?^ ?-)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1526 ;; Quoting necessary (this method only works in the skip |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1527 ;; functions). |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1528 (setq str (format "%s\\%c" str char)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1529 (setq str (format "%s%c" str char))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1530 ;; Check for range. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1531 (setq char2 char) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1532 (while (and chars (>= (1+ char2) (car chars))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1533 (setq char2 (pop chars))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1534 (unless (= char char2) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1535 (if (< (1+ char) char2) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1536 (setq str (format "%s-%c" str char2)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1537 (push char2 chars)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1538 str)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1539 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1540 ;; Leftovers from (X)Emacs 19 compatibility. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1541 (defalias 'c-regexp-opt 'regexp-opt) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1542 (defalias 'c-regexp-opt-depth 'regexp-opt-depth) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1543 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1544 |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1545 ;; Figure out what features this Emacs has |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1546 |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1547 (cc-bytecomp-defvar open-paren-in-column-0-is-defun-start) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1548 |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1549 (defconst c-emacs-features |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1550 (let (list) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1551 |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1552 (if (boundp 'infodock-version) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1553 ;; I've no idea what this actually is, but it's legacy. /mast |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1554 (setq list (cons 'infodock list))) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1555 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1556 ;; XEmacs uses 8-bit modify-syntax-entry flags. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1557 ;; Emacs uses a 1-bit flag. We will have to set up our |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1558 ;; syntax tables differently to handle this. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1559 (let ((table (copy-syntax-table)) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1560 entry) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1561 (modify-syntax-entry ?a ". 12345678" table) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1562 (cond |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1563 ;; Emacs |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1564 ((arrayp table) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1565 (setq entry (aref table ?a)) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1566 ;; In Emacs, table entries are cons cells |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1567 (if (consp entry) (setq entry (car entry)))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1568 ;; XEmacs |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1569 ((fboundp 'get-char-table) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1570 (setq entry (get-char-table ?a table))) |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1571 ;; incompatible |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1572 (t (error "CC Mode is incompatible with this version of Emacs"))) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1573 (setq list (cons (if (= (logand (lsh entry -16) 255) 255) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1574 '8-bit |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1575 '1-bit) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1576 list))) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1577 |
101822
dfb524fba23c
(c-emacs-features): Check the working of beginning/end-of-defun-function
Alan Mackenzie <acm@muc.de>
parents:
101112
diff
changeset
|
1578 ;; Check whether beginning/end-of-defun call |
dfb524fba23c
(c-emacs-features): Check the working of beginning/end-of-defun-function
Alan Mackenzie <acm@muc.de>
parents:
101112
diff
changeset
|
1579 ;; beginning/end-of-defun-function nicely, passing through the |
dfb524fba23c
(c-emacs-features): Check the working of beginning/end-of-defun-function
Alan Mackenzie <acm@muc.de>
parents:
101112
diff
changeset
|
1580 ;; argument and respecting the return code. |
101832
aa61f808aca4
(c-emacs-features): Change a let to a let* to eliminate BC warnings.
Alan Mackenzie <acm@muc.de>
parents:
101822
diff
changeset
|
1581 (let* (mark-ring |
aa61f808aca4
(c-emacs-features): Change a let to a let* to eliminate BC warnings.
Alan Mackenzie <acm@muc.de>
parents:
101822
diff
changeset
|
1582 (bod-param 'foo) (eod-param 'foo) |
aa61f808aca4
(c-emacs-features): Change a let to a let* to eliminate BC warnings.
Alan Mackenzie <acm@muc.de>
parents:
101822
diff
changeset
|
1583 (beginning-of-defun-function |
aa61f808aca4
(c-emacs-features): Change a let to a let* to eliminate BC warnings.
Alan Mackenzie <acm@muc.de>
parents:
101822
diff
changeset
|
1584 (lambda (&optional arg) |
aa61f808aca4
(c-emacs-features): Change a let to a let* to eliminate BC warnings.
Alan Mackenzie <acm@muc.de>
parents:
101822
diff
changeset
|
1585 (or (eq bod-param 'foo) (setq bod-param 'bar)) |
aa61f808aca4
(c-emacs-features): Change a let to a let* to eliminate BC warnings.
Alan Mackenzie <acm@muc.de>
parents:
101822
diff
changeset
|
1586 (and (eq bod-param 'foo) |
aa61f808aca4
(c-emacs-features): Change a let to a let* to eliminate BC warnings.
Alan Mackenzie <acm@muc.de>
parents:
101822
diff
changeset
|
1587 (setq bod-param arg) |
aa61f808aca4
(c-emacs-features): Change a let to a let* to eliminate BC warnings.
Alan Mackenzie <acm@muc.de>
parents:
101822
diff
changeset
|
1588 (eq arg 3)))) |
aa61f808aca4
(c-emacs-features): Change a let to a let* to eliminate BC warnings.
Alan Mackenzie <acm@muc.de>
parents:
101822
diff
changeset
|
1589 (end-of-defun-function |
aa61f808aca4
(c-emacs-features): Change a let to a let* to eliminate BC warnings.
Alan Mackenzie <acm@muc.de>
parents:
101822
diff
changeset
|
1590 (lambda (&optional arg) |
aa61f808aca4
(c-emacs-features): Change a let to a let* to eliminate BC warnings.
Alan Mackenzie <acm@muc.de>
parents:
101822
diff
changeset
|
1591 (and (eq eod-param 'foo) |
aa61f808aca4
(c-emacs-features): Change a let to a let* to eliminate BC warnings.
Alan Mackenzie <acm@muc.de>
parents:
101822
diff
changeset
|
1592 (setq eod-param arg) |
aa61f808aca4
(c-emacs-features): Change a let to a let* to eliminate BC warnings.
Alan Mackenzie <acm@muc.de>
parents:
101822
diff
changeset
|
1593 (eq arg 3))))) |
101974
035c2464c7e2
(c-emacs-features): Crash-fix: change `=' to `eq'.
Alan Mackenzie <acm@muc.de>
parents:
101832
diff
changeset
|
1594 (if (save-excursion (and (beginning-of-defun 3) (eq bod-param 3) |
101822
dfb524fba23c
(c-emacs-features): Check the working of beginning/end-of-defun-function
Alan Mackenzie <acm@muc.de>
parents:
101112
diff
changeset
|
1595 (not (beginning-of-defun)) |
101974
035c2464c7e2
(c-emacs-features): Crash-fix: change `=' to `eq'.
Alan Mackenzie <acm@muc.de>
parents:
101832
diff
changeset
|
1596 (end-of-defun 3) (eq eod-param 3) |
101822
dfb524fba23c
(c-emacs-features): Check the working of beginning/end-of-defun-function
Alan Mackenzie <acm@muc.de>
parents:
101112
diff
changeset
|
1597 (not (end-of-defun)))) |
dfb524fba23c
(c-emacs-features): Check the working of beginning/end-of-defun-function
Alan Mackenzie <acm@muc.de>
parents:
101112
diff
changeset
|
1598 (setq list (cons 'argumentative-bod-function list)))) |
96384
59d141ae8c74
cc-mode.el (c-mode-base-map): Don't bind C-M-[ae] to the CC Mode specific
Alan Mackenzie <acm@muc.de>
parents:
94673
diff
changeset
|
1599 |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1600 (let ((buf (generate-new-buffer " test")) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1601 parse-sexp-lookup-properties |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1602 parse-sexp-ignore-comments |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1603 lookup-syntax-properties) |
105813
df4934f25eef
* textmodes/two-column.el (2C-split):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104105
diff
changeset
|
1604 (with-current-buffer buf |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1605 (set-syntax-table (make-syntax-table)) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1606 |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1607 ;; For some reason we have to set some of these after the |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1608 ;; buffer has been made current. (Specifically, |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1609 ;; `parse-sexp-ignore-comments' in Emacs 21.) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1610 (setq parse-sexp-lookup-properties t |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1611 parse-sexp-ignore-comments t |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1612 lookup-syntax-properties t) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1613 |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1614 ;; Find out if the `syntax-table' text property works. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1615 (modify-syntax-entry ?< ".") |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1616 (modify-syntax-entry ?> ".") |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1617 (insert "<()>") |
67350
946119cea694
(c-emacs-features): Don't assume point-min==1.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67252
diff
changeset
|
1618 (c-mark-<-as-paren (point-min)) |
946119cea694
(c-emacs-features): Don't assume point-min==1.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67252
diff
changeset
|
1619 (c-mark->-as-paren (+ 3 (point-min))) |
946119cea694
(c-emacs-features): Don't assume point-min==1.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67252
diff
changeset
|
1620 (goto-char (point-min)) |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1621 (c-forward-sexp) |
67350
946119cea694
(c-emacs-features): Don't assume point-min==1.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67252
diff
changeset
|
1622 (if (= (point) (+ 4 (point-min))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1623 (setq list (cons 'syntax-properties list)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1624 (error (concat |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1625 "CC Mode is incompatible with this version of Emacs - " |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1626 "support for the `syntax-table' text property " |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1627 "is required."))) |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1628 |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1629 ;; Find out if generic comment delimiters work. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1630 (c-safe |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1631 (modify-syntax-entry ?x "!") |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1632 (if (string-match "\\s!" "x") |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1633 (setq list (cons 'gen-comment-delim list)))) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1634 |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1635 ;; Find out if generic string delimiters work. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1636 (c-safe |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1637 (modify-syntax-entry ?x "|") |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1638 (if (string-match "\\s|" "x") |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1639 (setq list (cons 'gen-string-delim list)))) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1640 |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1641 ;; See if POSIX char classes work. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1642 (when (and (string-match "[[:alpha:]]" "a") |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1643 ;; All versions of Emacs 21 so far haven't fixed |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1644 ;; char classes in `skip-chars-forward' and |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1645 ;; `skip-chars-backward'. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1646 (progn |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1647 (delete-region (point-min) (point-max)) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1648 (insert "foo123") |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1649 (skip-chars-backward "[:alnum:]") |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1650 (bobp)) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1651 (= (skip-chars-forward "[:alpha:]") 3)) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1652 (setq list (cons 'posix-char-classes list))) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1653 |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1654 ;; See if `open-paren-in-column-0-is-defun-start' exists and |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1655 ;; isn't buggy (Emacs >= 21.4). |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1656 (when (boundp 'open-paren-in-column-0-is-defun-start) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1657 (let ((open-paren-in-column-0-is-defun-start nil) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1658 (parse-sexp-ignore-comments t)) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1659 (delete-region (point-min) (point-max)) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1660 (set-syntax-table (make-syntax-table)) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1661 (modify-syntax-entry ?\' "\"") |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1662 (cond |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1663 ;; XEmacs. Afaik this is currently an Emacs-only |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1664 ;; feature, but it's good to be prepared. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1665 ((memq '8-bit list) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1666 (modify-syntax-entry ?/ ". 1456") |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1667 (modify-syntax-entry ?* ". 23")) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1668 ;; Emacs |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1669 ((memq '1-bit list) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1670 (modify-syntax-entry ?/ ". 124b") |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1671 (modify-syntax-entry ?* ". 23"))) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1672 (modify-syntax-entry ?\n "> b") |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1673 (insert "/* '\n () */") |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1674 (backward-sexp) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1675 (if (bobp) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1676 (setq list (cons 'col-0-paren list))))) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1677 |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1678 (set-buffer-modified-p nil)) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1679 (kill-buffer buf)) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1680 |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1681 ;; See if `parse-partial-sexp' returns the eighth element. |
67811
e7ac0fc47db5
(c-emacs-features): Do parse-partial-sexp at point, in case of narrowing.
Richard M. Stallman <rms@gnu.org>
parents:
67350
diff
changeset
|
1682 (if (c-safe (>= (length (save-excursion (parse-partial-sexp (point) (point)))) |
e7ac0fc47db5
(c-emacs-features): Do parse-partial-sexp at point, in case of narrowing.
Richard M. Stallman <rms@gnu.org>
parents:
67350
diff
changeset
|
1683 10)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1684 (setq list (cons 'pps-extended-state list)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1685 (error (concat |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1686 "CC Mode is incompatible with this version of Emacs - " |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1687 "`parse-partial-sexp' has to return at least 10 elements."))) |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1688 |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1689 ;;(message "c-emacs-features: %S" list) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1690 list) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1691 "A list of certain features in the (X)Emacs you are using. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1692 There are many flavors of Emacs out there, each with different |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1693 features supporting those needed by CC Mode. The following values |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1694 might be present: |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1695 |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1696 '8-bit 8 bit syntax entry flags (XEmacs style). |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1697 '1-bit 1 bit syntax entry flags (Emacs style). |
96384
59d141ae8c74
cc-mode.el (c-mode-base-map): Don't bind C-M-[ae] to the CC Mode specific
Alan Mackenzie <acm@muc.de>
parents:
94673
diff
changeset
|
1698 'argumentative-bod-function beginning-of-defun passes ARG through |
59d141ae8c74
cc-mode.el (c-mode-base-map): Don't bind C-M-[ae] to the CC Mode specific
Alan Mackenzie <acm@muc.de>
parents:
94673
diff
changeset
|
1699 to a non-null beginning-of-defun-function. It is assumed |
59d141ae8c74
cc-mode.el (c-mode-base-map): Don't bind C-M-[ae] to the CC Mode specific
Alan Mackenzie <acm@muc.de>
parents:
94673
diff
changeset
|
1700 the end-of-defun does the same thing. |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1701 'syntax-properties It works to override the syntax for specific characters |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1702 in the buffer with the 'syntax-table property. It's |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1703 always set - CC Mode no longer works in emacsen without |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1704 this feature. |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1705 'gen-comment-delim Generic comment delimiters work |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1706 (i.e. the syntax class `!'). |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1707 'gen-string-delim Generic string delimiters work |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1708 (i.e. the syntax class `|'). |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1709 'pps-extended-state `parse-partial-sexp' returns a list with at least 10 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1710 elements, i.e. it contains the position of the start of |
75515
b48c6cc5f648
(c-emacs-features): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
75347
diff
changeset
|
1711 the last comment or string. It's always set - CC Mode |
b48c6cc5f648
(c-emacs-features): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
75347
diff
changeset
|
1712 no longer works in emacsen without this feature. |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1713 'posix-char-classes The regexp engine understands POSIX character classes. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1714 'col-0-paren It's possible to turn off the ad-hoc rule that a paren |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1715 in column zero is the start of a defun. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1716 'infodock This is Infodock (based on XEmacs). |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1717 |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1718 '8-bit and '1-bit are mutually exclusive.") |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1719 |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1720 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1721 ;;; Some helper constants. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1722 |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1723 ;; If the regexp engine supports POSIX char classes then we can use |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1724 ;; them to handle extended charsets correctly. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1725 (if (memq 'posix-char-classes c-emacs-features) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1726 (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1727 (defconst c-alpha "[:alpha:]") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1728 (defconst c-alnum "[:alnum:]") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1729 (defconst c-digit "[:digit:]") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1730 (defconst c-upper "[:upper:]") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1731 (defconst c-lower "[:lower:]")) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1732 (defconst c-alpha "a-zA-Z") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1733 (defconst c-alnum "a-zA-Z0-9") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1734 (defconst c-digit "0-9") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1735 (defconst c-upper "A-Z") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1736 (defconst c-lower "a-z")) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1737 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1738 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1739 ;;; System for handling language dependent constants. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1740 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1741 ;; This is used to set various language dependent data in a flexible |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1742 ;; way: Language constants can be built from the values of other |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1743 ;; language constants, also those for other languages. They can also |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1744 ;; process the values of other language constants uniformly across all |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1745 ;; the languages. E.g. one language constant can list all the type |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1746 ;; keywords in each language, and another can build a regexp for each |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1747 ;; language from those lists without code duplication. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1748 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1749 ;; Language constants are defined with `c-lang-defconst', and their |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1750 ;; value forms (referred to as source definitions) are evaluated only |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1751 ;; on demand when requested for a particular language with |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1752 ;; `c-lang-const'. It's therefore possible to refer to the values of |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1753 ;; constants defined later in the file, or in another file, just as |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1754 ;; long as all the relevant `c-lang-defconst' have been loaded when |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1755 ;; `c-lang-const' is actually evaluated from somewhere else. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1756 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1757 ;; `c-lang-const' forms are also evaluated at compile time and |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1758 ;; replaced with the values they produce. Thus there's no overhead |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1759 ;; for this system when compiled code is used - only the values |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1760 ;; actually used in the code are present, and the file(s) containing |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1761 ;; the `c-lang-defconst' forms don't need to be loaded at all then. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1762 ;; There are however safeguards to make sure that they can be loaded |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1763 ;; to get the source definitions for the values if there's a mismatch |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1764 ;; in compiled versions, or if `c-lang-const' is used uncompiled. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1765 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1766 ;; Note that the source definitions in a `c-lang-defconst' form are |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1767 ;; compiled into the .elc file where it stands; there's no need to |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1768 ;; load the source file to get it. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1769 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1770 ;; See cc-langs.el for more details about how this system is deployed |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1771 ;; in CC Mode, and how the associated language variable system |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1772 ;; (`c-lang-defvar') works. That file also contains a lot of |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1773 ;; examples. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1774 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1775 (defun c-add-language (mode base-mode) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1776 "Declare a new language in the language dependent variable system. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1777 This is intended to be used by modes that inherit CC Mode to add new |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1778 languages. It should be used at the top level before any calls to |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1779 `c-lang-defconst'. MODE is the mode name symbol for the new language, |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1780 and BASE-MODE is the mode name symbol for the language in CC Mode that |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1781 is to be the template for the new mode. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1782 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1783 The exact effect of BASE-MODE is to make all language constants that |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1784 haven't got a setting in the new language fall back to their values in |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1785 BASE-MODE. It does not have any effect outside the language constant |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1786 system." |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1787 (unless (string-match "\\`\\(.*-\\)mode\\'" (symbol-name mode)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1788 (error "The mode name symbol `%s' must end with \"-mode\"" mode)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1789 (put mode 'c-mode-prefix (match-string 1 (symbol-name mode))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1790 (unless (get base-mode 'c-mode-prefix) |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1791 (error "Unknown base mode `%s'" base-mode)) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
1792 (put mode 'c-fallback-mode base-mode)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1793 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1794 (defvar c-lang-constants (make-vector 151 0)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1795 ;; This obarray is a cache to keep track of the language constants |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1796 ;; defined by `c-lang-defconst' and the evaluated values returned by |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1797 ;; `c-lang-const'. It's mostly used at compile time but it's not |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1798 ;; stored in compiled files. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1799 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1800 ;; The obarray contains all the language constants as symbols. The |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1801 ;; value cells hold the evaluated values as alists where each car is |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1802 ;; the mode name symbol and the corresponding cdr is the evaluated |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1803 ;; value in that mode. The property lists hold the source definitions |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1804 ;; and other miscellaneous data. The obarray might also contain |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1805 ;; various other symbols, but those don't have any variable bindings. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1806 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1807 (defvar c-lang-const-expansion nil) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1808 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1809 (defsubst c-get-current-file () |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1810 ;; Return the base name of the current file. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1811 (let ((file (cond |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1812 (load-in-progress |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1813 ;; Being loaded. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1814 load-file-name) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1815 ((and (boundp 'byte-compile-dest-file) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1816 (stringp byte-compile-dest-file)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1817 ;; Being compiled. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1818 byte-compile-dest-file) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1819 (t |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1820 ;; Being evaluated interactively. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1821 (buffer-file-name))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1822 (and file |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1823 (file-name-sans-extension |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1824 (file-name-nondirectory file))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1825 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1826 (defmacro c-lang-defconst-eval-immediately (form) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1827 "Can be used inside a VAL in `c-lang-defconst' to evaluate FORM |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1828 immediately, i.e. at the same time as the `c-lang-defconst' form |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1829 itself is evaluated." |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1830 ;; Evaluate at macro expansion time, i.e. in the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1831 ;; `cl-macroexpand-all' inside `c-lang-defconst'. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1832 (eval form)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1833 |
99409
aca04343781b
(cl-macroexpand-all): Declare.
Glenn Morris <rgm@gnu.org>
parents:
97971
diff
changeset
|
1834 ;; Only used at compile time - suppress "might not be defined at runtime". |
99433
526e8371e23f
(cl-macroexpand-all): Fix declaration.
Glenn Morris <rgm@gnu.org>
parents:
99409
diff
changeset
|
1835 (declare-function cl-macroexpand-all "cl-extra" (form &optional env)) |
99409
aca04343781b
(cl-macroexpand-all): Declare.
Glenn Morris <rgm@gnu.org>
parents:
97971
diff
changeset
|
1836 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1837 (defmacro c-lang-defconst (name &rest args) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1838 "Set the language specific values of the language constant NAME. |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
1839 The second argument can optionally be a docstring. The rest of the |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1840 arguments are one or more repetitions of LANG VAL where LANG specifies |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1841 the language(s) that VAL applies to. LANG is the name of the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1842 language, i.e. the mode name without the \"-mode\" suffix, or a list |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1843 of such language names, or `t' for all languages. VAL is a form to |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1844 evaluate to get the value. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1845 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1846 If LANG isn't `t' or one of the core languages in CC Mode, it must |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1847 have been declared with `c-add-language'. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1848 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1849 Neither NAME, LANG nor VAL are evaluated directly - they should not be |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1850 quoted. `c-lang-defconst-eval-immediately' can however be used inside |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1851 VAL to evaluate parts of it directly. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1852 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1853 When VAL is evaluated for some language, that language is temporarily |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1854 made current so that `c-lang-const' without an explicit language can |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1855 be used inside VAL to refer to the value of a language constant in the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1856 same language. That is particularly useful if LANG is `t'. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1857 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1858 VAL is not evaluated right away but rather when the value is requested |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1859 with `c-lang-const'. Thus it's possible to use `c-lang-const' inside |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1860 VAL to refer to language constants that haven't been defined yet. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1861 However, if the definition of a language constant is in another file |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1862 then that file must be loaded \(at compile time) before it's safe to |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1863 reference the constant. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1864 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1865 The assignments in ARGS are processed in sequence like `setq', so |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1866 \(c-lang-const NAME) may be used inside a VAL to refer to the last |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1867 assigned value to this language constant, or a value that it has |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1868 gotten in another earlier loaded file. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1869 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1870 To work well with repeated loads and interactive reevaluation, only |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1871 one `c-lang-defconst' for each NAME is permitted per file. If there |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1872 already is one it will be completely replaced; the value in the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1873 earlier definition will not affect `c-lang-const' on the same |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1874 constant. A file is identified by its base name." |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1875 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1876 (let* ((sym (intern (symbol-name name) c-lang-constants)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1877 ;; Make `c-lang-const' expand to a straightforward call to |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1878 ;; `c-get-lang-constant' in `cl-macroexpand-all' below. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1879 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1880 ;; (The default behavior, i.e. to expand to a call inside |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1881 ;; `eval-when-compile' should be equivalent, since that macro |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1882 ;; should only expand to its content if it's used inside a |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1883 ;; form that's already evaluated at compile time. It's |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1884 ;; however necessary to use our cover macro |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1885 ;; `cc-eval-when-compile' due to bugs in `eval-when-compile', |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1886 ;; and it expands to a bulkier form that in this case only is |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1887 ;; unnecessary garbage that we don't want to store in the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1888 ;; language constant source definitions.) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1889 (c-lang-const-expansion 'call) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1890 (c-langs-are-parametric t) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1891 bindings |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1892 pre-files) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1893 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1894 (or (symbolp name) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1895 (error "Not a symbol: %s" name)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1896 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1897 (when (stringp (car-safe args)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1898 ;; The docstring is hardly used anywhere since there's no normal |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1899 ;; symbol to attach it to. It's primarily for getting the right |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1900 ;; format in the source. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1901 (put sym 'variable-documentation (car args)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1902 (setq args (cdr args))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1903 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1904 (or args |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1905 (error "No assignments in `c-lang-defconst' for %s" name)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1906 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1907 ;; Rework ARGS to an association list to make it easier to handle. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1908 ;; It's reversed at the same time to make it easier to implement |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1909 ;; the demand-driven (i.e. reversed) evaluation in `c-lang-const'. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1910 (while args |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1911 (let ((assigned-mode |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1912 (cond ((eq (car args) t) t) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1913 ((symbolp (car args)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1914 (list (intern (concat (symbol-name (car args)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1915 "-mode")))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1916 ((listp (car args)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1917 (mapcar (lambda (lang) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1918 (or (symbolp lang) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1919 (error "Not a list of symbols: %s" |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1920 (car args))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1921 (intern (concat (symbol-name lang) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1922 "-mode"))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1923 (car args))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1924 (t (error "Not a symbol or a list of symbols: %s" |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1925 (car args))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1926 val) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1927 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1928 (or (cdr args) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1929 (error "No value for %s" (car args))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1930 (setq args (cdr args) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1931 val (car args)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1932 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1933 ;; Emacs has a weird bug where it seems to fail to read |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1934 ;; backquote lists from byte compiled files correctly (,@ |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1935 ;; forms, to be specific), so make sure the bindings in the |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
1936 ;; expansion below don't contain any backquote stuff. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1937 ;; (XEmacs handles it correctly and doesn't need this for that |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1938 ;; reason, but we also use this expansion handle |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1939 ;; `c-lang-defconst-eval-immediately' and to register |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1940 ;; dependencies on the `c-lang-const's in VAL.) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1941 (setq val (cl-macroexpand-all val)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1942 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1943 (setq bindings (cons (cons assigned-mode val) bindings) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1944 args (cdr args)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1945 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1946 ;; Compile in the other files that have provided source |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1947 ;; definitions for this symbol, to make sure the order in the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1948 ;; `source' property is correct even when files are loaded out of |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1949 ;; order. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1950 (setq pre-files (nreverse |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1951 ;; Reverse to get the right load order. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1952 (mapcar 'car (get sym 'source)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1953 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1954 `(eval-and-compile |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1955 (c-define-lang-constant ',name ',bindings |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1956 ,@(and pre-files `(',pre-files)))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1957 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1958 (put 'c-lang-defconst 'lisp-indent-function 1) |
71754
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
1959 ;(eval-after-load "edebug" ; 2006-07-09: def-edebug-spec is now in subr.el. |
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
1960 ; ' |
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
1961 (def-edebug-spec c-lang-defconst |
60304f6ae360
* progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el,
Alan Mackenzie <acm@muc.de>
parents:
69140
diff
changeset
|
1962 (&define name [&optional stringp] [&rest sexp def-form])) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1963 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1964 (defun c-define-lang-constant (name bindings &optional pre-files) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
1965 ;; Used by `c-lang-defconst'. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1966 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1967 (let* ((sym (intern (symbol-name name) c-lang-constants)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1968 (source (get sym 'source)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1969 (file (intern |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1970 (or (c-get-current-file) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1971 (error "`c-lang-defconst' must be used in a file")))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1972 (elem (assq file source))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1973 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1974 ;;(when (cdr-safe elem) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1975 ;; (message "Language constant %s redefined in %S" name file)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1976 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1977 ;; Note that the order in the source alist is relevant. Like how |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1978 ;; `c-lang-defconst' reverses the bindings, this reverses the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1979 ;; order between files so that the last to evaluate comes first. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1980 (unless elem |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1981 (while pre-files |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1982 (unless (assq (car pre-files) source) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1983 (setq source (cons (list (car pre-files)) source))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1984 (setq pre-files (cdr pre-files))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1985 (put sym 'source (cons (setq elem (list file)) source))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1986 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1987 (setcdr elem bindings) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1988 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1989 ;; Bind the symbol as a variable, or clear any earlier evaluated |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1990 ;; value it has. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1991 (set sym nil) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1992 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1993 ;; Clear the evaluated values that depend on this source. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1994 (let ((agenda (get sym 'dependents)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1995 (visited (make-vector 101 0)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1996 ptr) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1997 (while agenda |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1998 (setq sym (car agenda) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
1999 agenda (cdr agenda)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2000 (intern (symbol-name sym) visited) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2001 (set sym nil) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2002 (setq ptr (get sym 'dependents)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2003 (while ptr |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2004 (setq sym (car ptr) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2005 ptr (cdr ptr)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2006 (unless (intern-soft (symbol-name sym) visited) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2007 (setq agenda (cons sym agenda)))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2008 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2009 name)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2010 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2011 (defmacro c-lang-const (name &optional lang) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2012 "Get the mode specific value of the language constant NAME in language LANG. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2013 LANG is the name of the language, i.e. the mode name without the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2014 \"-mode\" suffix. If used inside `c-lang-defconst' or |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2015 `c-lang-defvar', LANG may be left out to refer to the current |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2016 language. NAME and LANG are not evaluated so they should not be |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
2017 quoted." |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2018 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2019 (or (symbolp name) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2020 (error "Not a symbol: %s" name)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2021 (or (symbolp lang) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2022 (error "Not a symbol: %s" lang)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2023 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2024 (let ((sym (intern (symbol-name name) c-lang-constants)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2025 mode source-files args) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2026 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
2027 (when lang |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
2028 (setq mode (intern (concat (symbol-name lang) "-mode"))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
2029 (unless (get mode 'c-mode-prefix) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
2030 (error |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
2031 "Unknown language %S since it got no `c-mode-prefix' property" |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
2032 (symbol-name lang)))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2033 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2034 (if (eq c-lang-const-expansion 'immediate) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2035 ;; No need to find out the source file(s) when we evaluate |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2036 ;; immediately since all the info is already there in the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2037 ;; `source' property. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2038 `',(c-get-lang-constant name nil mode) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2039 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2040 (let ((file (c-get-current-file))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2041 (if file (setq file (intern file))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2042 ;; Get the source file(s) that must be loaded to get the value |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2043 ;; of the constant. If the symbol isn't defined yet we assume |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2044 ;; that its definition will come later in this file, and thus |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2045 ;; are no file dependencies needed. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2046 (setq source-files (nreverse |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2047 ;; Reverse to get the right load order. |
51887
a39d64d1eb50
(c-make-keywords-re): Don't use delete-duplicates.
Richard M. Stallman <rms@gnu.org>
parents:
51829
diff
changeset
|
2048 (apply 'nconc |
a39d64d1eb50
(c-make-keywords-re): Don't use delete-duplicates.
Richard M. Stallman <rms@gnu.org>
parents:
51829
diff
changeset
|
2049 (mapcar (lambda (elem) |
a39d64d1eb50
(c-make-keywords-re): Don't use delete-duplicates.
Richard M. Stallman <rms@gnu.org>
parents:
51829
diff
changeset
|
2050 (if (eq file (car elem)) |
a39d64d1eb50
(c-make-keywords-re): Don't use delete-duplicates.
Richard M. Stallman <rms@gnu.org>
parents:
51829
diff
changeset
|
2051 nil ; Exclude our own file. |
a39d64d1eb50
(c-make-keywords-re): Don't use delete-duplicates.
Richard M. Stallman <rms@gnu.org>
parents:
51829
diff
changeset
|
2052 (list (car elem)))) |
a39d64d1eb50
(c-make-keywords-re): Don't use delete-duplicates.
Richard M. Stallman <rms@gnu.org>
parents:
51829
diff
changeset
|
2053 (get sym 'source)))))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2054 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
2055 ;; Make some effort to do a compact call to |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2056 ;; `c-get-lang-constant' since it will be compiled in. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2057 (setq args (and mode `(',mode))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2058 (if (or source-files args) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2059 (setq args (cons (and source-files `',source-files) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2060 args))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2061 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2062 (if (or (eq c-lang-const-expansion 'call) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
2063 (and (not c-lang-const-expansion) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
2064 (not mode)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2065 load-in-progress |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2066 (not (boundp 'byte-compile-dest-file)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2067 (not (stringp byte-compile-dest-file))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2068 ;; Either a straight call is requested in the context, or |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
2069 ;; we're in an "uncontrolled" context and got no language, |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
2070 ;; or we're not being byte compiled so the compile time |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
2071 ;; stuff below is unnecessary. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2072 `(c-get-lang-constant ',name ,@args) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2073 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2074 ;; Being compiled. If the loading and compiling version is |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2075 ;; the same we use a value that is evaluated at compile time, |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2076 ;; otherwise it's evaluated at runtime. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2077 `(if (eq c-version-sym ',c-version-sym) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2078 (cc-eval-when-compile |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2079 (c-get-lang-constant ',name ,@args)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2080 (c-get-lang-constant ',name ,@args)))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2081 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2082 (defvar c-lang-constants-under-evaluation nil) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2083 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2084 (defun c-get-lang-constant (name &optional source-files mode) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64699
diff
changeset
|
2085 ;; Used by `c-lang-const'. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2086 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2087 (or mode |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2088 (setq mode c-buffer-is-cc-mode) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2089 (error "No current language")) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2090 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2091 (let* ((sym (intern (symbol-name name) c-lang-constants)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2092 (source (get sym 'source)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2093 elem |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2094 (eval-in-sym (and c-lang-constants-under-evaluation |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2095 (caar c-lang-constants-under-evaluation)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2096 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2097 ;; Record the dependencies between this symbol and the one we're |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2098 ;; being evaluated in. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2099 (when eval-in-sym |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2100 (or (memq eval-in-sym (get sym 'dependents)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2101 (put sym 'dependents (cons eval-in-sym (get sym 'dependents))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2102 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2103 ;; Make sure the source files have entries on the `source' |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2104 ;; property so that loading will take place when necessary. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2105 (while source-files |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2106 (unless (assq (car source-files) source) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2107 (put sym 'source |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2108 (setq source (cons (list (car source-files)) source))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2109 ;; Might pull in more definitions which affect the value. The |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2110 ;; clearing of dependent values etc is done when the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2111 ;; definition is encountered during the load; this is just to |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2112 ;; jump past the check for a cached value below. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2113 (set sym nil)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2114 (setq source-files (cdr source-files))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2115 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2116 (if (and (boundp sym) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2117 (setq elem (assq mode (symbol-value sym)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2118 (cdr elem) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2119 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2120 ;; Check if an evaluation of this symbol is already underway. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2121 ;; In that case we just continue with the "assignment" before |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2122 ;; the one currently being evaluated, thereby creating the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2123 ;; illusion if a `setq'-like sequence of assignments. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2124 (let* ((c-buffer-is-cc-mode mode) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2125 (source-pos |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2126 (or (assq sym c-lang-constants-under-evaluation) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2127 (cons sym (vector source nil)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2128 ;; Append `c-lang-constants-under-evaluation' even if an |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2129 ;; earlier entry is found. It's only necessary to get |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2130 ;; the recording of dependencies above correct. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2131 (c-lang-constants-under-evaluation |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2132 (cons source-pos c-lang-constants-under-evaluation)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2133 (fallback (get mode 'c-fallback-mode)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2134 value |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2135 ;; Make sure the recursion limits aren't very low |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2136 ;; since the `c-lang-const' dependencies can go deep. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2137 (max-specpdl-size (max max-specpdl-size 3000)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2138 (max-lisp-eval-depth (max max-lisp-eval-depth 1000))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2139 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2140 (if (if fallback |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2141 (let ((backup-source-pos (copy-sequence (cdr source-pos)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2142 (and |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2143 ;; First try the original mode but don't accept an |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2144 ;; entry matching all languages since the fallback |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2145 ;; mode might have an explicit entry before that. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2146 (eq (setq value (c-find-assignment-for-mode |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2147 (cdr source-pos) mode nil name)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2148 c-lang-constants) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2149 ;; Try again with the fallback mode from the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2150 ;; original position. Note that |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2151 ;; `c-buffer-is-cc-mode' still is the real mode if |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2152 ;; language parameterization takes place. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2153 (eq (setq value (c-find-assignment-for-mode |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2154 (setcdr source-pos backup-source-pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2155 fallback t name)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2156 c-lang-constants))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2157 ;; A simple lookup with no fallback mode. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2158 (eq (setq value (c-find-assignment-for-mode |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2159 (cdr source-pos) mode t name)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2160 c-lang-constants)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2161 (error |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2162 "`%s' got no (prior) value in %s (might be a cyclic reference)" |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2163 name mode)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2164 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2165 (condition-case err |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2166 (setq value (eval value)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2167 (error |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2168 ;; Print a message to aid in locating the error. We don't |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2169 ;; print the error itself since that will be done later by |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2170 ;; some caller higher up. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2171 (message "Eval error in the `c-lang-defconst' for `%s' in %s:" |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2172 sym mode) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2173 (makunbound sym) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2174 (signal (car err) (cdr err)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2175 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2176 (set sym (cons (cons mode value) (symbol-value sym))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2177 value)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2178 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2179 (defun c-find-assignment-for-mode (source-pos mode match-any-lang name) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2180 ;; Find the first assignment entry that applies to MODE at or after |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2181 ;; SOURCE-POS. If MATCH-ANY-LANG is non-nil, entries with `t' as |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2182 ;; the language list are considered to match, otherwise they don't. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2183 ;; On return SOURCE-POS is updated to point to the next assignment |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2184 ;; after the returned one. If no assignment is found, |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2185 ;; `c-lang-constants' is returned as a magic value. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2186 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2187 ;; SOURCE-POS is a vector that points out a specific assignment in |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2188 ;; the double alist that's used in the `source' property. The first |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2189 ;; element is the position in the top alist which is indexed with |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2190 ;; the source files, and the second element is the position in the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2191 ;; nested bindings alist. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2192 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2193 ;; NAME is only used for error messages. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2194 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2195 (catch 'found |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2196 (let ((file-entry (elt source-pos 0)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2197 (assignment-entry (elt source-pos 1)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2198 assignment) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2199 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2200 (while (if assignment-entry |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2201 t |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2202 ;; Handled the last assignment from one file, begin on the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2203 ;; next. Due to the check in `c-lang-defconst', we know |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2204 ;; there's at least one. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2205 (when file-entry |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2206 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2207 (unless (aset source-pos 1 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2208 (setq assignment-entry (cdar file-entry))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2209 ;; The file containing the source definitions has not |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2210 ;; been loaded. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2211 (let ((file (symbol-name (caar file-entry))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2212 (c-lang-constants-under-evaluation nil)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2213 ;;(message (concat "Loading %s to get the source " |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2214 ;; "value for language constant %s") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2215 ;; file name) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2216 (load file)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2217 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2218 (unless (setq assignment-entry (cdar file-entry)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2219 ;; The load didn't fill in the source for the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2220 ;; constant as expected. The situation is |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2221 ;; probably that a derived mode was written for |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2222 ;; and compiled with another version of CC Mode, |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2223 ;; and the requested constant isn't in the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2224 ;; currently loaded one. Put in a dummy |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2225 ;; assignment that matches no language. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2226 (setcdr (car file-entry) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2227 (setq assignment-entry (list (list nil)))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2228 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2229 (aset source-pos 0 (setq file-entry (cdr file-entry))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2230 t)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2231 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2232 (setq assignment (car assignment-entry)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2233 (aset source-pos 1 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2234 (setq assignment-entry (cdr assignment-entry))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2235 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2236 (when (if (listp (car assignment)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2237 (memq mode (car assignment)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2238 match-any-lang) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2239 (throw 'found (cdr assignment)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2240 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
49598
diff
changeset
|
2241 c-lang-constants))) |
24282 | 2242 |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
2243 (defun c-lang-major-mode-is (mode) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
2244 ;; `c-major-mode-is' expands to a call to this function inside |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
2245 ;; `c-lang-defconst'. Here we also match the mode(s) against any |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
2246 ;; fallback modes for the one in `c-buffer-is-cc-mode', so that |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
2247 ;; e.g. (c-major-mode-is 'c++-mode) is true in a derived language |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
2248 ;; that has c++-mode as base mode. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
2249 (unless (listp mode) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
2250 (setq mode (list mode))) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
2251 (let (match (buf-mode c-buffer-is-cc-mode)) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
2252 (while (if (memq buf-mode mode) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
2253 (progn |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
2254 (setq match t) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
2255 nil) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
2256 (setq buf-mode (get buf-mode 'c-fallback-mode)))) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
2257 match)) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53610
diff
changeset
|
2258 |
18720 | 2259 |
36920 | 2260 (cc-provide 'cc-defs) |
38422
7a94f1c588c4
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
36920
diff
changeset
|
2261 |
93975
1e3a407766b9
Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
92148
diff
changeset
|
2262 ;; arch-tag: 3bb2629d-dd84-4ff0-ad39-584be0fe3cda |
18720 | 2263 ;;; cc-defs.el ends here |