Commit graph

166 commits

Author SHA1 Message Date
Alan Mackenzie
a4750b3956 Implement ' separators in C++ integer literals.
* lisp/progmodes/cc-langs.el (c-get-state-before-change-functions): insert
c-before-after-change-digit-quote into the C++ value.
(c-before-font-lock-functions): Insert c-depropertize-new-text into the values
for all languages.  Insert c-before-after-change-digit-quote into the C++
value.

* lisp/progmodes/cc-mode.el (c-depropertize-CPP): Wrap the function in
c-save-buffer-state.
(c-depropertize-new-text, c-before-after-change-digit-quote): New functions.
2016-06-24 13:26:34 +00:00
Alan Mackenzie
fabb558250 Handle C++ raw strings.
* lisp/progmodes/cc-engine.el (c-raw-string-pos, c-depropertize-raw-string)
(c-depropertize-raw-strings-in-region,
c-before-change-check-raw-strings)
(c-propertize-raw-string-opener, c-after-change-re-mark-raw-strings): New
functions.

* lisp/progmodes/cc-fonts.el (c-basic-matchers-before): Insert a clause for
c-font-lock-raw-strings.
(c-font-lock-raw-strings): New function.

* lisp/progmodes/cc-langs.el (c-get-state-before-change-functions): Insert
c-before-change-check-raw-strings into the C++ value, and c-depropertize-CPP
into the values for C, C++, and Objective C.
(c-before-font-lock-functions): Insert c-after-change-re-mark-raw-strings into
the C++ value.

* lisp/progmodes/cc-mode.el (c-old-BEG, c-old-END): New variables.
(c-depropertize-CPP): New function, extracted from
c-neutralize-syntax-in-and-mark-CPP.
(c-neutralize-syntax-in-and-mark-CPP): Remove the call to
c-clear-char-property-with-value for 'syntax-table value '(1) at the beginning
of the function.
(c-after-change): Set c-old-BEG and c-old-END to the current values of
c-new-BEG and c-new-END.
2016-06-09 12:24:27 +00:00
Alan Mackenzie
cd66716baf Correct fontification and indentation of C++'s "constexpr" expressions
* lisp/progmodes/cc-langs.el (c-type-modifier-kwds): Remove "constexpr".
(c-modifier-kwds): Add "constexpr".
2016-06-01 13:31:47 +00:00
Alan Mackenzie
80dcc23709 Rationalize the use of c-new-BEG and c-new-END in CC Mode.
Remove the now redundant c-old-BOM and c-old-EOM.

* lisp/progmodes/cc-engine.el (c-macro-cache-syntactic): Change and simplify
meaning.
(c-macro-cache-no-comment): New variable.
(c-invalidate-macro-cache, c-beginning-of-macro, c-end-of-macro): incorporate
the new c-macro-cache-no-comment.
(c-syntactic-end-of-macro): Make better use of c-macro-cache-syntactic.
(c-no-comment-end-of-macro): New function.

* lisp/progmodes/cc-langs.el (c-before-font-lock-functions): Add
c-extend-font-lock-region-for-macros to C/C++/ObjC value.

* lisp/progmodes/cc-mode.el (c-old-BOM, c-old-EOM): Remove.
(c-extend-region-for-CPP): Put results in c-new-BEG/END rather than
c-old-BOM/EOM.
(c-extend-font-lock-region-for-macros): Simplify meaning, no longer returning
a cons for the new region, since the function is now called as an after-change
function.  No longer adjust c-new-END for the length of inserted/deleted
text.  Move the size restrictions on macros to here from
c-neutralize-syntax-in-and-mark-CPP.
(c-neutralize-syntax-in-and-mark-CPP): No longer adjust c-new-BEG/END here.
Use c-no-comment-end-of-macro rather than c-syntactic-end-of-macro to find the
upper boundary to "neutralize" syntactically obtrusive characters.
(c-change-expand-fl-region): Don't set c-new-END to next BOL when already at
one.
2016-05-29 12:22:17 +00:00
Alan Mackenzie
99950f7214 C++ Mode: attribute in class declaration fouls up indentation. Fix!
* lisp/progmodes/cc-engine.el (c-looking-at-decl-block): Add code to skip
back over noise clauses and attribute clauses.

* lisp/progmodes/cc-langs.el (c-paren-nontype-key): New language variable.
2016-05-28 15:17:28 +00:00
Alan Mackenzie
db2ee1cd63 c-forward-<>-arglist no longer directly applies face properties in Java Mode.
This allows the calling of c-restore-<>-properties from c-common-init without
the test suite giving spurious errors.

* lisp/progmodes/cc-engine.el (c-forward-<>-arglist): Remove the form that
sets face properties.
(c-forward-<>-arglist-recur): Reformulate the bit that handles types inside
template brackets using c-inside-<>-type-key.  Don't bind
c-record-type-identifiers or c-record-found-types around the recursive call,
allowing positions of found types to flow back to the caller.

* lisp/progmodes/cc-langs.el (c-inside-<>-type-kwds, c-inside-<>-type-key):
new lang consts/var.

* lisp/progmodes/cc-mode.el (c-common-init): Don't remove
c-restore-<>-properties from the list of functions called at mode
initialization.
2016-04-25 17:08:26 +00:00
Alan Mackenzie
fda715c6cb Add fontification for a C declaration which looks like a function call.
For example, "t1 *fn (t2 *b);".

* lisp/progmodes/cc-engine.el (c-forward-decl-or-cast-1): Add new variable
at-decl-start, setting it to whether the putative decl starts immediately
after ; or { or }.  Accept such a construct as a decl when at-decl-start is
non-nil.

* lisp/progmodes/cc-langs.el (c-pre-start-tokens): New language variable.
2016-04-25 15:19:58 +00:00
Paul Eggert
7621a52145 ; Spelling fixes 2016-04-21 14:45:01 -07:00
Alan Mackenzie
515ce25ffd Don't confuse "::" with ":" when trying to parse member initializers.
* lisp/progmodes/cc-engine.el (c-back-over-member-initializers): Check
more robustly for ":" token when searching backwards for it.

* lisp/progmodes/cc-langs (c-:$-multichar-token-regexp): New language
variable.

[This reapplies commit 9e5452f716,
which was inadvertently lost by merge commit
7823745acb.]
2016-03-21 17:05:55 -07:00
Alan Mackenzie
71dc8213b1 Handle "noise" macros and compiler directives.
* lisp/progmodes/cc-langs.el (c-symbol-char-key): New language variable.

* lisp/progmodes/cc-vars.el (c-noise-macro-names)
(c-noise-macro-with-parens-names): New customizable variables.
(c-noise-macro-name-re, c-noise-macro-with-parens-name-re): New variables.
(c-make-noise-macro-regexps): New function.

* lisp/progmodes/cc-engine.el (c-forward-sws, c-backward-sws): Adapt to treat
members of c-noise-macro-names as whitespace.
(c-forward-noise-clause): New function.
(c-forward-keyword-prefixed-id, c-forward-type, c-forward-declarator)
(c-forward-decl-or-cast-1, c-backward-over-enum-header)
(c-guess-basic-syntax CASE 5A.3, CASE 5A.5, CASE 9A):
Handle "noise clauses" in parallel with, e.g., "hangon key clauses".

* lisp/progmodes/cc-fonts.el (c-complex-decl-matchers): Handle "noise clauses"
in parallel with "prefix-spec keywords".

* lisp/progmodes/cc-mode.el (c-mode, c++-mode, objc-mode): call
c-make-noise-macro-regexps to initialize the internal variables.

* doc/misc/cc-mode.texi ("Noise Macros"): New section documenting the new
facilities.
2016-02-29 21:51:32 +00:00
John Wiegley
220613e089 Merge from origin/emacs-25
d4b93e1 Minor fixes in global-auto-composition-mode
02b037b Allow arithmetic operators inside C++ template constructs.
44b16f6 Avoid crashes in semi-malformed 'condition-case'
652e5b4 Allow arithmetic operators inside C++ template constructs.
d9ea795 Fix regression with 'recent-keys' and keyboard macros
903603f Fix wording in a doc-view.el comment
cf79616 ; Spelling fixes
f8bf1b3 CONTRIBUTE cleanups and updates
f3aaca3 Port USE_STACK_LISP_OBJECTS fix to Clang
1834ac7 Port to x86 GCC 4.3.1 and earlier
8482949 Fix point movement under 'scroll-conservatively'
c1313b5 Replace colon in file name (not legal on Windows)
f7af26c Fix a typo in edt.texi
8badf95 Make 'mmap_realloc' on MS-Windows more reliable
856cd94 Grep alias `all' shall not match parent directory
2016-02-15 14:11:03 -08:00
Alan Mackenzie
02b037b85c Allow arithmetic operators inside C++ template constructs.
Fixes debbugs #22486.  This corrects the previous patch with this message
which was empty.

* lisp/progmodes/cc-langs.el (c-multichar->-op-not->>-regexp): New language
variable.
(c-<>-notable-chars-re): New language variable.

* lisp/progmodes/cc-engine.el (c-forward-<>-arglist-recur): User
c-<>-notable-chars-re in place of the former fixed string in searching for
places to stop and examine.
Use c-multichar->-op-not->>-regexp to check that a found ">" is not part of a
multichar operator in place of the former c->-op-without->-cont-regexp.
Add code to skip forwards over a balanced parenthesized expression.
2016-02-15 15:05:02 +00:00
Paul Eggert
1a9cec16fe Merge from origin/emacs-25
3f481ad Rename xref-query-replace to xref-query-replace-in-results
62f4ed4 Update cl-defgeneric and cl-defmethod docstrings
2111e0e Comment out next-error-function integration in xref
4e11ad3 Correct a use of "which" in intro.texi
a1865bc Distinguish the two meanings of Java's keyword "default".  Fixes bug #22358.
76045f7 Don't operate on menu bar of nonexistent frame
c32f3bc Unbreak the GNUstep build.
2016-01-30 11:28:37 -08:00
Alan Mackenzie
a1865bcf96 Distinguish the two meanings of Java's keyword "default". Fixes bug #22358.
* lisp/progmodes/cc-engine.el (c-guess-basic-syntax CASE 14): Check the
context of case labels (including "default") more rigorously.
(c-guess-basic-syntax CASE 15): Consequential amendment.

* lisp/progmodes/cc-langs.el (c-modifier-kwds): Add "default" to Java's value.
2016-01-23 19:38:49 +00:00
Alan Mackenzie
9e5452f716 Don't confuse "::" with ":" when trying to parse member initializers.
* lisp/progmodes/cc-engine.el (c-back-over-member-initializers): Check
more robustly for ":" token when searching backwards for it.

* lisp/progmodes/cc-langs (c-:$-multichar-token-regexp): New language
variable.
2016-01-15 21:15:20 +00:00
Alan Mackenzie
b51f1ef82f Java Mode: Fontify identifiers in the presence of annotations.
* lisp/progmodes/cc-engine.el (c-forward-annotation): Tidy up the coding:
Don't move point when the defun fails.
(c-forward-decl-or-cast-1): Correct a usage of match data.

* lisp/progmodes/cc-fonts.el (c-font-lock-maybe-decl-faces): Remove.
(c-font-lock-declarations): Use the new c-maybe-decl-faces in place of the
removed variable.

* lisp/progmodes/cc-langs.el (c-maybe-decl-faces): New language variable.
2016-01-11 17:46:04 +00:00
Alan Mackenzie
73809908c6 Remove function wrongly on AWK Mode value of context fontification hook.
* lisp/progmodes/cc-langs.el (c-before-context-fontification-functions):
swap order of entries so that awk's entry isn't superseded by the default.

* lisp/progmodes/cc-mode.el (c-before-context-fl-expand-region): Correct
to handle nil value of c-before-context-fontification-functions.
2016-01-05 21:16:37 +00:00
Alan Mackenzie
33219d385b Apply text properties for <, > in new after-change function (C++ Java Modes).
These are category/syntax-table properties to give < and > paren syntax.
Also apply certain `c-type' text properties to the insides of <..> constructs
to ensure that identifiers contained by them get fontified.  This patch fixes
bug #681.

* lisp/progmodes/cc-cmds.el (c-electric-lt-gt): Reformulate due to new
after-change action.

* lisp/progmodes/cc-engine.el (c-before-change-check-<>-operators): Expand
change region to include <s and >s which might not be already marked as
parens, rather than just when paren text properties are removed.
(c-restore-<>-properties): New after-change function, which applies text
properties marking < and > with paren syntax.

* lisp/progmodes/cc-fonts.el (c-font-lock-declarations): Ensure `c-type'
properties are applied to the interiors of <...> constructs, to ensure
fontification of identifiers there.

* lisp/progmodes/cc-langs.el (c-before-font-lock-functions): Add
c-restore-<>-properties to this list for C++ and Java.

* lisp/progmodes/cc-mode.el (c-common-init): When invoking
c-before-font-lock-functions, exclude c-restore-<>-properties from the
functions invoked.
(c-before-change): Initialize c-new-BEG/END here (rather than c-after-change)
to allow modification by before-change functions.
(c-after-change): Amend c-new-END here, rather than initializing it and
c-new-BEG.
2016-01-04 22:35:13 +00:00
Paul Eggert
0e963201d0 Update copyright year to 2016
Run admin/update-copyright.
2016-01-01 01:34:24 -08:00
Alan Mackenzie
326ffcce5f Allow line comments ending with escaped NL to be continued to the next line.
Use this in C, C++, and Objective C Modes.  Fixes bug#22246

* src/syntax.c (comment-end-can-be-escaped): New buffer local variable.
(forw-comment, back-comment): On encountering an end of comment character,
test whether it is escaped when `comment-end-can-be-escaped' is non-nil.

* doc/lispref/syntax.texi (Control Parsing): Describe
`comment-end-can-be-escaped'.

* etc/NEWS (Lisp Changes): Describe `comment-end-can-be-escaped'.

* lisp/progmodes/cc-langs.el: New c-lang-setvar `comment-end-can-be-escaped'.
2015-12-28 16:01:05 +00:00
Alan Mackenzie
7233767e3c CC Mode: eliminate almost all byte compilation warnings
* lisp/progmodes/cc-bytecomp.el (cc-bytecomp-noruntime-functions): Remove.
(cc-require): Remove the crude hack that saved and restored
byte-compile-noruntime-functions.
(cc-conditional-require, cc-conditional-require-after-load): New macros.

* lisp/progmodes/cc-defs.el (top level): Reformulate code which loaded
cc-fix.el using the new macros in cc-bytecomp.el.

* lisp/progmodes/cc-langs.el (c++-template-syntax-table)
(c-no-parens-syntax-table): Add extra "(eval ..)"s around "'(lambda ..)"
forms to remove the superflous quotes.
2015-11-24 19:44:34 +00:00
Paul Eggert
284c470ef7 Backslash cleanup in Elisp source files
This patch should not change behavior.  It typically omits backslashes
where they are redundant (e.g., in the string literal "^\$").
In a few places, insert backslashes where they make regular
expressions clearer: e.g., replace "^\*" (equivalent to "^*") with
"^\\*", which has the same effect as a regular expression.
Also, use ‘\ %’ instead of ‘\%’ when avoiding confusion with SCCS IDs,
and similarly use ‘\ $’ instead of ‘\$’ when avoiding confusion with
RCS IDs, as that makes it clearer that the backslash is intended.
2015-09-17 16:09:39 -07:00
Stefan Monnier
560022a5b6 * lisp/progmodes/cc-langs.el (c-make-init-lang-vars-fun): Use dolist 2015-09-14 09:26:54 -04:00
Alan Mackenzie
498d7fe980 Replace cadar' with cadr/car', since `cadar' is problematic on Emacs.
(c-make-init-lang-vars-fun): Replace two occurrences of `cadar' with
`cadr/car'.
2015-09-14 12:44:09 +00:00
Paul Eggert
26bd978d87 Fix some more docstring etc. quoting problems
Mostly these fixes prevent the transliteration of apostrophes
that should stay apostrophes.  Also, prefer curved quotes in
Bahá’í proper names, as that’s the preferred Bahá’í style and
these names are chock-full of non-ASCII characters anyway.
* lisp/emacs-lisp/eieio-core.el (eieio-defclass-autoload)
(eieio-defclass-internal):
* lisp/emacs-lisp/eieio.el (defclass):
* lisp/hi-lock.el (hi-lock-mode):
Don’t transliterate Lisp apostrophes when generating a
doc string or diagnostic.
* lisp/international/mule-diag.el (list-coding-systems-1):
* lisp/international/ogonek.el (ogonek-jak, ogonek-how):
* lisp/mail/sendmail.el (sendmail-query-user-about-smtp):
* lisp/vc/ediff-mult.el (ediff-redraw-registry-buffer):
* lisp/vc/ediff-ptch.el (ediff-fixup-patch-map):
Substitute quotes before putting them in the help buffer.
2015-09-03 15:32:54 -07:00
Paul Eggert
4c24b9e30f Quoting fixes in lisp/progmodes
* lisp/progmodes/cc-engine.el (c-bos-report-error):
* lisp/progmodes/cpp.el (cpp-edit-reset):
* lisp/progmodes/ebrowse.el (ebrowse-tags-apropos):
* lisp/progmodes/etags.el (etags-tags-apropos-additional)
(etags-tags-apropos, list-tags, tags-apropos):
* lisp/progmodes/executable.el (executable-set-magic):
* lisp/progmodes/octave.el (octave-sync-function-file-names)
(octave-help, octave-find-definition-default-filename)
(octave-find-definition):
Respect text quoting style in doc strings and diagnostics.
* lisp/progmodes/cc-langs.el (c-populate-syntax-table):
* lisp/progmodes/verilog-mode.el (verilog-auto-reset-widths):
* lisp/progmodes/vhdl-mode.el (vhdl-electric-quote):
Escape apostrophes in doc strings.
* lisp/progmodes/cmacexp.el (c-macro-expansion):
Use straight quoting in ASCII comment.
* lisp/progmodes/idlwave.el (idlwave-auto-fill-split-string)
(idlwave-pad-keyword):
* lisp/progmodes/vhdl-mode.el (vhdl-widget-directory-validate)
(vhdl-electric-open-bracket, vhdl-electric-close-bracket):
(vhdl-electric-semicolon, vhdl-electric-comma)
(vhdl-electric-period, vhdl-electric-equal):
Use directed quotes in diagnostics and doc strings.
2015-08-30 23:12:29 -07:00
Paul Eggert
875a5d0ead Prefer directed to neutral quotes
Prefer directed to neutral quotes in docstings and diagnostics.
In docstrings, escape apostrophes that would otherwise be translated
to curved quotes using the newer, simpler rules.
* admin/unidata/unidata-gen.el (unidata-gen-table):
* lisp/align.el (align-region):
* lisp/allout.el (allout-mode, allout-solicit-alternate-bullet):
* lisp/bookmark.el (bookmark-default-annotation-text):
* lisp/calc/calc-aent.el (math-read-if, math-read-factor):
* lisp/calc/calc-lang.el (math-read-giac-subscr)
(math-read-math-subscr):
* lisp/calc/calc-misc.el (report-calc-bug):
* lisp/calc/calc-prog.el (calc-fix-token-name)
(calc-read-parse-table-part):
* lisp/cedet/ede/pmake.el (ede-proj-makefile-insert-dist-rules):
* lisp/cedet/semantic/complete.el (semantic-displayor-show-request):
* lisp/dabbrev.el (dabbrev-expand):
* lisp/emacs-lisp/checkdoc.el (checkdoc-this-string-valid-engine):
* lisp/emacs-lisp/elint.el (elint-get-top-forms):
* lisp/emacs-lisp/lisp-mnt.el (lm-verify):
* lisp/emulation/viper-cmd.el (viper-toggle-search-style):
* lisp/erc/erc-button.el (erc-nick-popup):
* lisp/erc/erc.el (erc-cmd-LOAD, erc-handle-login):
* lisp/eshell/em-dirs.el (eshell/cd):
* lisp/eshell/em-glob.el (eshell-glob-regexp):
* lisp/eshell/em-pred.el (eshell-parse-modifiers):
* lisp/eshell/esh-arg.el (eshell-parse-arguments):
* lisp/eshell/esh-opt.el (eshell-show-usage):
* lisp/files-x.el (modify-file-local-variable):
* lisp/filesets.el (filesets-add-buffer, filesets-remove-buffer)
(filesets-update-pre010505):
* lisp/find-cmd.el (find-generic, find-to-string):
* lisp/gnus/auth-source.el (auth-source-netrc-parse-entries):
* lisp/gnus/gnus-agent.el (gnus-agent-check-overview-buffer)
(gnus-agent-fetch-headers):
* lisp/gnus/gnus-int.el (gnus-start-news-server):
* lisp/gnus/gnus-registry.el:
(gnus-registry--split-fancy-with-parent-internal):
* lisp/gnus/gnus-score.el (gnus-summary-increase-score):
* lisp/gnus/gnus-start.el (gnus-convert-old-newsrc):
* lisp/gnus/gnus-topic.el (gnus-topic-rename):
* lisp/gnus/legacy-gnus-agent.el (gnus-agent-unlist-expire-days):
* lisp/gnus/nnmairix.el (nnmairix-widget-create-query):
* lisp/gnus/spam.el (spam-check-blackholes):
* lisp/mail/feedmail.el (feedmail-run-the-queue):
* lisp/mpc.el (mpc-playlist-rename):
* lisp/net/ange-ftp.el (ange-ftp-shell-command):
* lisp/net/mairix.el (mairix-widget-create-query):
* lisp/net/tramp-cache.el:
* lisp/obsolete/otodo-mode.el (todo-more-important-p):
* lisp/obsolete/pgg-gpg.el (pgg-gpg-process-region):
* lisp/obsolete/pgg-pgp.el (pgg-pgp-process-region):
* lisp/obsolete/pgg-pgp5.el (pgg-pgp5-process-region):
* lisp/org/ob-core.el (org-babel-goto-named-src-block)
(org-babel-goto-named-result):
* lisp/org/ob-fortran.el (org-babel-fortran-ensure-main-wrap):
* lisp/org/ob-ref.el (org-babel-ref-resolve):
* lisp/org/org-agenda.el (org-agenda-prepare):
* lisp/org/org-bibtex.el (org-bibtex-fields):
* lisp/org/org-clock.el (org-clock-notify-once-if-expired)
(org-clock-resolve):
* lisp/org/org-feed.el (org-feed-parse-atom-entry):
* lisp/org/org-habit.el (org-habit-parse-todo):
* lisp/org/org-mouse.el (org-mouse-popup-global-menu)
(org-mouse-context-menu):
* lisp/org/org-table.el (org-table-edit-formulas):
* lisp/org/ox.el (org-export-async-start):
* lisp/play/dunnet.el (dun-score, dun-help, dun-endgame-question)
(dun-rooms, dun-endgame-questions):
* lisp/progmodes/ada-mode.el (ada-goto-matching-start):
* lisp/progmodes/ada-xref.el (ada-find-executable):
* lisp/progmodes/antlr-mode.el (antlr-options-alists):
* lisp/progmodes/flymake.el (flymake-parse-err-lines)
(flymake-start-syntax-check-process):
* lisp/progmodes/python.el (python-define-auxiliary-skeleton):
* lisp/progmodes/sql.el (sql-comint):
* lisp/progmodes/verilog-mode.el (verilog-load-file-at-point):
* lisp/server.el (server-get-auth-key):
* lisp/subr.el (version-to-list):
* lisp/textmodes/reftex-ref.el (reftex-label):
* lisp/textmodes/reftex-toc.el (reftex-toc-rename-label):
* lisp/vc/ediff-diff.el (ediff-same-contents):
* lisp/vc/vc-cvs.el (vc-cvs-mode-line-string):
* test/automated/tramp-tests.el (tramp-test33-asynchronous-requests):
Use directed rather than neutral quotes in diagnostics.
2015-08-24 23:57:25 -07:00
Stefan Monnier
18371ed2da * lisp/progmodes/cc-*.el: Fix up commenting style
* lisp/progmodes/cc-vars.el, lisp/progmodes/cc-styles.el:
* lisp/progmodes/cc-mode.el, lisp/progmodes/cc-menus.el:
* lisp/progmodes/cc-langs.el, lisp/progmodes/cc-guess.el:
* lisp/progmodes/cc-fonts.el, lisp/progmodes/cc-engine.el:
* lisp/progmodes/cc-defs.el, lisp/progmodes/cc-cmds.el:
* lisp/progmodes/cc-bytecomp.el, lisp/progmodes/cc-awk.el:
* lisp/progmodes/cc-align.el, lisp/net/soap-client.el:
Fix up commenting style.
2015-08-21 23:46:21 -04:00
Alan Mackenzie
e4de91d8dd Introduce new macros to cover Emacs's new names in cl-lib.el.
This also eliminates `mapcan' warnings in XEmacs.

progmodes/cc-defs.el (c--mapcan-status): new variable to characterise
[X]Emacs versions.
(top-level): Require either 'cl or 'cl-lib, depending on
c--mapcan-status.
Change this back to cc-external-require from an eval-when-compile
require.
(c--mapcan, c--set-difference, c--intersection, c--macroexpand-all)
(c--delete-duplicates): New macros which expand into either old or new
names.
(c-make-keywords-re, c-lang-defconst, c-lang-const) Use the new macros
rather than the old names.

progmodes/cc-engine.el (c-declare-lang-variables): Use c--mapcan rather
than mapcan.

progmodes/cc-fonts.el (c-compose-keywords-list): Use c--mapcan.

progmodes/cc-langs.el (top-level): Require either 'cl or 'cl-lib,
depending on c--mapcan-status.
(c-filter-ops, c-all-op-syntax-tokens, c-assignment-op-regexp)
(c-type-start-kwds, c-prefix-spec-kwds, c-specifier-key)
(c-not-decl-init-keywords, c-not-primitive-type-keywords)
(c-paren-any-kwds, c-<>-sexp-kwds, c-block-stmt-kwds, c-expr-kwds)
(c-decl-block-key, c-keywords, c-keywords-obarray)
(c-regular-keywords-regexp, c-primary-expr-regexp,
c-primary-expr-regexp)
(c-block-prefix-disallowed-chars, c-known-type-key,
c-nonlabel-token-key)
(c-make-init-lang-vars-fun): Use the new macros rather than the old
names.
2015-08-12 21:28:55 +00:00
Daniel Colascione
49c8458d7b Add C-language keyword constants to C++
* lisp/progmodes/cc-langs.el (c-constant-kwds): Add C-language
keyword constants to C++.
2015-05-25 13:51:35 -07:00
Alan Mackenzie
23bb07e05d Fix the CC Mode fixes from 2015-03-30. Fixes debbugs#20240.
* progmodes/cc-mode.el (c-extend-after-change-region): Widen before
applying text properties.
* progmodes/cc-langs.el (c-before-font-lock-functions): Update an entry
to a new function name.
2015-04-01 19:12:07 +00:00
Alan Mackenzie
05a5a94000 Correct calculation of CC Mode's font-lock region.
* cc-mode.el (c-fl-decl-start): Renamed from c-set-fl-decl-start.
* Change
signature such that nil is returned when no declaration is found.
(c-change-expand-fl-region): Renamed from c-change-set-fl-decl-start.
This now also handles expanding the font lock region to whole lines.
(c-context-expand-fl-region): Renamed from c-context-set-fl-decl-start.
This now also handles expanding the font lock region to whole lines.
(c-font-lock-fontify-region): When a change font lock region is
spuriously enlarged to the beginning-of-line by jit-lock, fontify the
extra bit separately from the region calculated by CC Mode.
(c-extend-after-change-region): Explicitly apply 'fontified properties
to
the extended bits of the font lock region.

* cc-langs.el (c-before-font-lock-functions)
(c-before-context-fontification-functions): Use new names for existing
functions (see above).
2015-03-30 16:37:04 +00:00
Alan Mackenzie
30c5f5cdef Allow compilation during loading of Modes derived from a CC Mode mode.
Fixes debbugs#19206.

cc-bytecomp.el (cc-bytecomp-compiling-or-loading): new function which
walks the stack to discover whether we're compiling or loading.
(cc-bytecomp-is-compiling): Reformulate, and move towards beginning.
(cc-bytecomp-is-loading): New defsubst.
(cc-bytecomp-setup-environment, cc-bytecomp-restore-environment): Use
the
above defsubsts.
(cc-require-when-compile, cc-bytecomp-defvar)
(cc-bytecomp-defun): Simplify conditionals.

cc-defs.el (cc-bytecomp-compiling-or-loading): "Borrow" this function
from cc-bytecomp.el.
(c-get-current-file): Reformulate using the above.
(c-lang-defconst): Prevent duplicate entries of file names in a symbol's
'source property.
(c-lang-const): Use cc-bytecomp-is-compiling.

cc-langs.el (c-make-init-lang-vars-fun): Use cc-bytecomp-is-compiling.
2015-01-13 15:47:26 +00:00
Paul Eggert
7e09ef09a4 Update copyright year to 2015
Run admin/update-copyright.
2015-01-01 14:26:41 -08:00
Alan Mackenzie
948fa912de Make C++11 uniform init syntax work. New keywords "final" and "override"
cc-engine.el (c-back-over-member-initializer-braces): New function.
(c-guess-basic-syntax): Set `containing-sex' and `lim' using the new
function.

cc-fonts.el (c-font-lock-declarations): Check more carefully for "are we
at a declarator?" using c-back-over-member-initializers.

cc-langs.el (c-type-modifier-kwds): include "final" and "override" in
the
C++ value.
2014-12-19 18:35:14 +00:00
Stefan Monnier
39ead8cdfc * lisp/progmodes/cc-cmds.el (c-subword-mode): Alias to subword-mode.
(c-update-modeline):
* lisp/progmodes/cc-langs.el (c-mode-menu): Use c-subword-mode.
* lisp/progmodes/cc-mode.el (subword-mode): Move autoload to cc-cmds.el.
(c-mode-base-map): Use c-subword-mode.
2014-12-18 11:18:21 -05:00
Stefan Monnier
517505322a Merge some of the differences from the standalone CC-mode.
The main change is to only use the `category' text-property only when
available.  For that many calls are changed to use c-get-char-property,
c-next-single-property-change, c-sc-scan-lists,
c-sc-parse-partial-sexp, c-unmark-<->-as-paren.

* lisp/progmodes/cc-align.el (c-lineup-respect-col-0): New function.

* lisp/progmodes/cc-cmds.el (c-forward-into-nomenclature)
(c-backward-into-nomenclature): Use cc-subword if subword-mode is
not available.
(c-beginning-of-defun, c-end-of-defun, c-mark-function)
(c-indent-line-or-region): Use c-region-is-active-p.

* lisp/progmodes/cc-defs.el (c-version): Bump up to 5.33.
(c-use-category): New const.
(c-next-single-property-change): New macro.
(c-region-is-active-p): Prefer region-active-p when available.
(c-search-backward-char-property): Fix old min/max typo; probably
a copy/paste error.
(c-mark-<-as-paren, c-mark->-as-paren, c-unmark-<->-as-paren):
Turn them into macros that obey c-use-category.
(c-sc-scan-lists-no-category+1+1, c-sc-scan-lists-no-category+1-1)
(c-sc-scan-lists-no-category-1+1, c-sc-scan-lists-no-category-1-1)
(c-sc-scan-lists, c-sc-parse-partial-sexp)
(c-looking-at-non-alphnumspace): New macros.
(c-sc-parse-partial-sexp-no-category): New function.
(c-emacs-features): Add `category-properties' element.

* lisp/progmodes/cc-engine.el (c-invalidate-state-cache, c-parse-state):
Handle the case where categories are not available.
(c-record-parse-state-state, c-replay-parse-state-state):
Handle marker values.
(c-before-change-check-<>-operators): Look for the `syntax-table'
property rather than for the corresponding `category'.
(c-looking-at-decl-block): Remove unused var
`c-disallow-comma-in-<>-arglists'.
(c-forward-<>-arglist-recur): Remove unused var
`orig-record-found-types'.

* lisp/progmodes/cc-langs.el (c-modified-constant): New lang var.
(c-known-type-key): Don't make a list just to throw it away.

* lisp/progmodes/cc-bytecomp.el (cc-bytecomp-unbound-variables)
(cc-bytecomp-original-functions, cc-bytecomp-original-properties)
(cc-bytecomp-loaded-files): Re-set each time the file is loaded.
(cc-bytecomp-obsolete-var, cc-bytecomp-ignore-obsolete)
(cc-bytecomp-obsolete-fun): Delete unused functions.

* lisp/progmodes/cc-mode.el (c-just-done-before-change): New var.
(c-basic-common-init): Initialize it.
(c-common-init): Only use mode-require-final-newline when available.
(c-before-change): Check and set c-just-done-before-change.
(c-after-change): Re-set c-just-done-before-change.
(c-advise-fl-for-region): New macro.
(lazy-lock-defer-rest-after-change, lazy-lock-defer-line-after-change)
(font-lock-after-change-function, jit-lock-after-change):
Advise if needed.
2014-12-01 15:06:49 -05:00
Paul Pogonyshev
0b37f903b6 progmodes/cc-langs.el: Support some of the new keywords in C++11.
(c-operators): Add "alignof".
(c-primitive-type-kwds): Add "char16_t", "char32_t".
(c-type-modifier-kwds): Add "constexpr", "noexcept".
(c-modifier-kwds): Add "thread_local".
(c-constant-kwds): Add "nullptr".

Original patch by Paul Pogonyshev <pogonyshev@gmail.com> and updated
by Rüdiger Sonderfeld  <ruediger@c-plusplus.net>.
2014-11-18 03:34:01 +01:00
Alan Mackenzie
ff73c2c3e2 Add "enum classs" support to C++ mode.
progmodes/cc-langs.el (c-after-brace-list-decl-kwds)
(c-after-brace-list-key): New language consts/variables.
progmodes/cc-engine.el (c-looking-at-decl-block): Exclude
spurious match of "enum struct" from decl-block recognition.
(c-backward-colon-prefixed-type): New function.
(c-backward-over-enum-header): Call above function to extend
recognition of enum structure.
2014-10-30 16:07:19 +00:00
Glenn Morris
52b410c60a Merge from emacs-24; up to 117634 2014-10-29 22:15:28 -07:00
Stefan Monnier
237bf45a48 * lisp/progmodes/cc-defs.el (c--macroexpand-all): New function.
(c-lang-defconst):
* lisp/progmodes/cc-langs.el (c-make-init-lang-vars-fun): Use it.

Fixes: debbugs:18845
2014-10-29 23:50:15 -04:00
Paul Eggert
cc541e588a Spelling fixes. 2014-10-12 13:09:15 -07:00
Stefan Monnier
03c4553666 Merge trivially safe differences from standalone CC-mode.
* lisp/progmodes/cc-mode.el (c-initialize-cc-mode): Don't quote a symbol
just to then pass it to `symbol-value'.
(prog-mode): Provide fallback definition, if needed.
* lisp/progmodes/cc-langs.el: Always load `cl'.  Don't load `cl-lib'.
Remove "cl-" prefix accordingly.
* lisp/progmodes/cc-fonts.el (c-font-lock-invalid-string): Use integerp or
characterp depending on the type of characters.
(c-font-lock-enum-tail): Remove unused var `start'.
* lisp/progmodes/cc-engine.el: Load CL at compile-time.
(c-declare-lang-variables): Use mapcan.
(c-append-to-state-cache): Remove unused var `ce+1'.
(c-parse-state-state): Make buffer-local.
(c-ssb-lit-begin): Remove unused var `pps-end-pos'.
(c-just-after-func-arglist-p): Remove unused var `end'.
* lisp/progmodes/cc-defs.el: Load cc-fix if delete-dups is undefined.
(c-<-as-paren-syntax, c->-as-paren-syntax): Move definition earlier.
(c-make-keywords-re): Use delete-dups.
(c-get-current-file): Avoid file-name-base.
* lisp/progmodes/cc-cmds.el (c-electric-lt-gt): Remove unused var
`close-paren-inserted'.
* lisp/progmodes/cc-awk.el (c-forward-sws): Remove unused declaration.
2014-10-04 00:03:49 -04:00
Alan Mackenzie
c8b22035d6 CC Mode: revert recent changes and fix bug 17463 (cc-langs.elc gets
loaded at run-time).
* progmodes/cc-langs.el (c-no-parens-syntax-table): Rename the
c-lang-const to c-make-no-parens-syntax-table and correct the
logic.
(c-no-parens-syntax-table): Correct the logic of the c-lang-defvar.
2014-09-10 21:38:11 +00:00
Stefan Monnier
4700363363 CC-mode: Set open-paren-in-column-0-is-defun-start to nil;
plus misc cleanup.
* lisp/progmodes/cc-mode.el (c-basic-common-init):
Set open-paren-in-column-0-is-defun-start.
(adaptive-fill-first-line-regexp, font-lock-syntactic-keywords):
Remove declarations, unused.
(run-mode-hooks): Remove declaration.
(font-lock-defaults): Use plain `defvar' to declare.
(c-run-mode-hooks): Test existence of run-mode-hooks with fboundp.
* lisp/progmodes/cc-langs.el (c-filter-ops): Avoid `setq'.
(c-make-mode-syntax-table): Don't micro-optimize.
(c-keywords, c-keyword-member-alist): Simplify.
(c-kwds-lang-consts): Don't eval at compile-time.
(c-primary-expr-regexp): Comment out unused vars.
* lisp/progmodes/cc-fonts.el (c-font-lock-context): Declare at top-level.
(c-font-byte-compile): New var.
(c--compile): New function.  Use it instead of `byte-compile'.
(c-cpp-matchers): Quote the value returned by
`c-make-syntactic-matcher' in case it's not self-evaluating.
(c-basic-matchers-before): Avoid a plain MATCHER as keyword, wrap it in
parentheses instead (in case MATCHER happens to be a list).
(c-font-lock-enum-tail): Remove unused var `start'.
(c-font-lock-objc-methods): Silence byte-compiler warnings.
* lisp/progmodes/cc-engine.el (c-syntactic-re-search-forward): Sink an `if'
test into an argument.
* lisp/progmodes/cc-defs.el (c-point, c-major-mode-is, c-put-char-property)
(c-get-char-property): Don't use `eval' just to unquote a constant.
(c-use-extents): Remove.  Use (featurep 'xemacs), compiled
more efficiently.
(c-put-char-property-fun): Don't call `byte-compile' by hand.
(c-clear-char-property, c-clear-char-properties): Check that `property'
is a quoted constant.
(c-emacs-features): Remove `infodock', `syntax-properties', and
`pps-extended-state' (never used), `8-bit' and `1-bit' (use (featurep
'xemacs) instead).  Use `with-temp-buffer' and let-bind vars after
changing buffer, so we don't have to setq them again afterwards.
(c-lang-const): Remove redundant symbolp assertions.
(c-find-assignment-for-mode): Use `or'.
* lisp/Makefile.in (compile-one-process): Remove cc-mode dependency.
2014-09-10 12:32:36 -04:00
Alan Mackenzie
4031fb7bac Handle C++11's "auto" and "decltype" constructions.
cc-engine.el (c-forward-type): Enhance to recognise and return 'decltype.
(c-forward-decl-or-cast-1): New let variables backup-kwd-sym,
prev-kwd-sym, new-style-auto.  Enhance to handle the new "auto" keyword.
    
cc-fonts.el (c-font-lock-declarations): Handle the "decltype" keyword.
(c-font-lock-c++-new): Handle "decltype" constructions.
    
cc-langs.el (c-auto-ops, c-auto-ops-re): New c-lang-defconsts/defvars.
(c-haskell-op, c-haskell-op-re): New c-lang-defconsts/defvars.
(c-typeof-kwds, c-typeof-key): New c-lang-defconsts/defvars.
(c-typeless-decl-kwds): Append "auto" onto the C++ value.
(c-not-decl-init-keywords): Also exclude c-typeof-kwds from value.
2014-08-24 20:50:11 +00:00
Alan Mackenzie
66bb9533fc Make ">>" act as double template ender in C++ Mode.
cc-langs.el (c->-op-cont-tokens): New lang-const split off from
c->-op-cont-re.
(c->-op-cont-tokens): Change to use the above.
(c->-op-without->-cont-regexp): New lang-const.
    
cc-engine.el (c-forward-<>-arglist-recur): Use
c->-op-without->-cont-regexp in place of c->-op-cont-tokens.
2014-08-24 20:38:11 +00:00
Daniel Colascione
fb32e9f8f3 Unbreak compilation of derived cc-mode modes
* lisp/progmodes/cc-defs.el (c-lang-defconst-eval-immediately):
Use `macroexpand-all' instead of `cl-macroexpand-all'.

* lisp/progmodes/cc-langs.el: Change comments from `cl-macroexpand-all'
to `macroexpand-all'
2014-07-14 16:58:52 -07:00
Alan Mackenzie
e3be29073e Don't call c-parse-state when c++-template-syntax-table is active.
* progmodes/cc-engine.el (c-guess-continued-construct CASE G)
(c-guess-basic-syntax CASE 5D.3): Rearrange so that
c-syntactic-skip-backwards isn't called with the pertinent syntax
table.
2014-06-29 11:26:47 +00:00
Glenn Morris
cd7d4e9b38 Stop cc-mode loading cl at runtime
* lisp/progmodes/cc-langs.el: Require cl-lib. 
Replace delete-duplicates and mapcan by cl- versions throughout.
And cl-macroexpand-all by macroexpand-all.
(delete-duplicates, mapcan, cl-macroexpand-all): No need to declare.

Fixes: debbugs:17463
2014-06-14 16:54:39 -07:00