2011-07-30 17:18:40 -04:00
|
|
|
;;; c.by -- LL grammar for C/C++ language specification
|
2021-01-01 01:13:56 -08:00
|
|
|
;; Copyright (C) 1999-2021 Free Software Foundation, Inc.
|
2011-07-29 22:06:43 -04:00
|
|
|
;;
|
|
|
|
;; Author: Eric M. Ludlam <zappo@gnu.org>
|
|
|
|
;; David Ponce <david@dponce.com>
|
|
|
|
;; Klaus Berndl <klaus.berndl@sdm.de>
|
|
|
|
;;
|
2011-07-30 17:18:40 -04:00
|
|
|
;; This file is part of GNU Emacs.
|
|
|
|
|
|
|
|
;; GNU Emacs is free software: you can redistribute it and/or modify
|
2011-07-29 22:06:43 -04:00
|
|
|
;; it under the terms of the GNU General Public License as published by
|
2011-07-30 17:18:40 -04:00
|
|
|
;; the Free Software Foundation, either version 3 of the License, or
|
|
|
|
;; (at your option) any later version.
|
|
|
|
|
|
|
|
;; GNU Emacs is distributed in the hope that it will be useful,
|
2011-07-29 22:06:43 -04:00
|
|
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
;; GNU General Public License for more details.
|
2011-07-30 17:18:40 -04:00
|
|
|
|
2011-07-29 22:06:43 -04:00
|
|
|
;; You should have received a copy of the GNU General Public License
|
2017-09-13 15:52:52 -07:00
|
|
|
;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
|
2011-07-29 22:06:43 -04:00
|
|
|
|
|
|
|
;; TODO: From Nate Schley
|
|
|
|
;; > * Can't parse signature element: "const char* const rmc_ClrTxt"
|
|
|
|
;; > * Can't parse signature element: "char* const dellog_ClrTxt"
|
|
|
|
;; > * Can't parse signature element: "const char* dellog_SetTxt"
|
|
|
|
;; > * Can't parse signature element: "const RmcCmdSSPADetailedStatus& status"
|
|
|
|
;; >
|
|
|
|
;; > And FWIW I have seen the following argument cases not handled, even
|
|
|
|
;; > with no leading/trailing spaces in the split:
|
|
|
|
;; >
|
|
|
|
;; > * Can't parse signature element: "const bool currentAlarmStatus"
|
|
|
|
;; > * Can't parse signature element: "unsigned char mode"
|
|
|
|
;; > * Can't parse signature element: "TskTimingTask* tsktimingtask"
|
|
|
|
;; > * Can't parse signature element: "unsigned char htrStatus"
|
|
|
|
;; > * Can't parse signature element: "char trackPower[]"
|
|
|
|
;; > * Can't parse signature element: "const RmcCmdMCDetailedStatus& status"
|
|
|
|
;; > * Can't parse signature element: "RmcBucStatus* rftBucStatus"
|
|
|
|
|
2011-07-31 20:11:37 -04:00
|
|
|
%package semantic-c-by
|
2012-10-02 02:10:29 +08:00
|
|
|
%provide semantic/bovine/c-by
|
|
|
|
|
|
|
|
%{
|
Stop keeping (all but one) generated cedet grammar files in the repository
* configure.ac (SUBDIR_MAKEFILES, AC_CONFIG_FILES):
Add admin/grammars Makefile.
* Makefile.in (distclean, bootstrap-clean, maintainer-clean):
Also clean admin/grammars, if present.
* admin/grammars/README: Remove.
* admin/grammars/Makefile.in: New file.
* admin/grammars/c.by, admin/grammars/java-tags.wy, admin/grammars/js.wy:
* admin/grammars/python.wy: Update declarations to match generated outputs.
* lisp/Makefile.in (semantic): New.
(compile-main): Depend on semantic.
* lisp/cedet/semantic/bovine/grammar.el (bovine--make-parser-1):
New function, split from bovine-make-parsers.
(bovine-make-parsers): Use bovine--make-parser-1.
(bovine-batch-make-parser): New function.
* lisp/cedet/semantic/wisent/grammar.el (wisent--make-parser-1):
New function, split from wisent-make-parsers.
(wisent-make-parsers): Use wisent--make-parser-1.
(wisent-batch-make-parser): New function.
* lisp/cedet/semantic/db.el (semanticdb-save-all-db):
Avoid prompting in batch mode.
* lisp/cedet/semantic/grammar.el (semantic-grammar-footer-template):
Disable version-control and autoloads in the output.
(semantic-grammar-create-package):
Add option to return nil if output is up-to-date.
* lisp/cedet/semantic/bovine/c-by.el, lisp/cedet/semantic/bovine/make-by.el:
* lisp/cedet/semantic/bovine/scm-by.el, lisp/cedet/semantic/wisent/javat-wy.el:
* lisp/cedet/semantic/wisent/js-wy.el, lisp/cedet/semantic/wisent/python-wy.el:
* lisp/cedet/srecode/srt-wy.el: Remove generated files from repository.
* .bzrignore: Update for this.
2013-11-29 18:06:34 -08:00
|
|
|
(declare-function semantic-c-reconstitute-token "semantic/bovine/c"
|
|
|
|
(tokenpart declmods typedecl))
|
|
|
|
(declare-function semantic-c-reconstitute-template "semantic/bovine/c"
|
|
|
|
(tag specifier))
|
|
|
|
(declare-function semantic-expand-c-tag "semantic/bovine/c" (tag))
|
|
|
|
(declare-function semantic-parse-region "semantic"
|
|
|
|
(start end &optional nonterminal depth returnonerror))
|
2012-10-02 02:10:29 +08:00
|
|
|
}
|
2011-07-29 22:06:43 -04:00
|
|
|
|
|
|
|
%languagemode c-mode c++-mode
|
|
|
|
%start declaration
|
|
|
|
%scopestart codeblock
|
|
|
|
|
|
|
|
%token <punctuation> HASH "\\`[#]\\'"
|
|
|
|
%token <punctuation> PERIOD "\\`[.]\\'"
|
|
|
|
%token <punctuation> COLON "\\`[:]\\'"
|
|
|
|
%token <punctuation> SEMICOLON "\\`[;]\\'"
|
|
|
|
%token <punctuation> STAR "\\`[*]\\'"
|
|
|
|
%token <punctuation> AMPERSAND "\\`[&]\\'"
|
|
|
|
%token <punctuation> DIVIDE "\\`[/]\\'"
|
|
|
|
%token <punctuation> PLUS "\\`[+]\\'"
|
|
|
|
%token <punctuation> MINUS "\\`[-]\\'"
|
|
|
|
%token <punctuation> BANG "\\`[!]\\'"
|
Update from CEDET trunk.
* grammars/c.by (template-type): Add :template-specifier and
:typevar to capture extra details about the template.
(opt-post-fcn-modifiers): Splice in the found symbol into the
return value correctly.
(QUESTION): New punctuation.
(expression): Add ternary conditional support.
* grammars/scheme.by (MODULE): New token.
(scheme): Handle expanding the MODULE tag.
(scheme-list): Remove closeparen required match.
(scheme-in-list): Remove extraneous matches for DEFINE. Add
support for MODULE Simplify matching for code & make work.
(name-args, name-arg-list, name-arg-expand): Make it work.
* semantic.el (semantic-mode): Add/remove 3
completion-at-point-functions.
(semantic-completion-at-point-function): Removed.
(semantic-analyze-completion-at-point-function)
(semantic-analyze-notc-completion-at-point-function)
(semantic-analyze-nolongprefix-completion-at-point-function): New
completion at point functions.
* semantic/doc.el (semantic-doc-snarf-comment-for-tag): Fix case
when comment-end is empty string.
* semantic/debug.el
(semantic-debug-parser-debugger-source): New buffer local
variable.
(semantic-debug-interface): Add 'nil' initform to overlays.
(semantic-debug-mode): Remove read-only tags from buffers on exit.
(semantic-debug): Add autoload cookie. Force the language
specific debugger to load.
* semantic/db.el (generic::semanticdb-full-filename): New generic
method to allow this method to be used on buffer names via an
associated database.
* semantic/symref.el
(semantic-symref-cleanup-recent-buffers-fcn): When cleaning up
buffers, don't clean up buffers that are being used (i.e., in a
window) when the hook fires.
(semantic-symref-recently-opened-buffers): New tracking variable.
(semantic-symref-cleanup-recent-buffers-fcn): New hook fcn.
(semantic-symref-result-get-tags): Move logic into
`semantic-symref-hit-to-tag-via-buffer', and cleanup buffers via
the symref cleanup function in post-command-hook.
(semantic-symref-hit-to-tag-via-buffer): Logic that used to be
from above.
(semantic-symref-hit-to-tag-via-db): New.
* semantic/analyze.el:
(semantic-analyze-find-tag-sequence-default): If first entry in
sequence is the only one, apply tagclass filter.
(semantic-analyze-princ-sequence): Show slot even if empty.
(semantic-analyze-find-tag-sequence)
(semantic-analyze-find-tag-sequence-default): Add flags argument.
Add support for forcing the final entry of the sequence to be of
class variable.
(semantic-analyze-find-tag): Fix bug where input class filter was
ignored if there was a typecache match.
(semantic-analyze-current-context-default): For assignments, the
assignee now must be of class variable.
* semantic/analyze/complete.el
(semantic-analyze-possible-completions-default): Add
'no-longprefix' flag. When used, the prefix and prefixtypes are
shortened to just the last symbol.
* semantic/bovine/c.el (semantic-c-do-lex-if): Catch errors from
'hideif', and push to the parser warning stack.
(semantic-lex-cpp-define): When a comment is at the end of a
macro, do not subtract an extra 1 from the found position. Fixes
bug with: #define foo (a)/**/ adding an extra ')' to the stream.
* semantic/bovine/scm.el (semantic-lex-scheme-symbol): Allow
symbols to be one char long.
* semantic/bovine/grammar.el
(bovine-grammar-calculate-source-on-path): New.
(bovine-grammar-setupcode-builder): Use it.
* ede.el (ede/detect): New require.
(ede-version): Bump version
(ede-initialize-state-current-buffer): Use new
`ede-detect-directory-for-project' to detect projects first
instead of depending on currente dir only.
(ede-delete-project-from-global-list): New.
(ede-flush-deleted-projects): Use above.
(ede-check-project-query-fcn): New variable
(ede-check-project-directory): Use above when querying the user.
Added to support unit testing of this security measure.
(ede-initialize-state-current-buffer): Use
`ede-directory-project-cons' instead of the -detect- fcn to take
advantage of the cache. Pass found project into
`ede-load-project-file'.
(ede-load-project-file): Add new input DETECTIN.
(ede-rescan-toplevel): Get the proj root a better way.
(ede-load-project-file): Return the loaded object. When asking
for existing project, ask for an exact match.
(ede-initialize-state-current-buffer): Simplify some conditional
logic.
(ede-load-project-file): Simplify conditional logic.
(ede-global-list-sanity-check): New Testing fcn.
(ede-parent-project): Replace old code with call to faster
`ede-find-subproject-for-directory'.
(ede-load-project-file): Use
`ede-directory-get-toplevel-open-project' instead of above
deleted. Rename "pfc" to "autoloader". Use
`ede-directory-project-cons' to detect a project. Delete no
project found case where we search up the tree.
* ede/auto.el (ede-project-autoload): Fix doc typo. Add
`:root-only' slot.
(ede-auto-load-project): Doc update: warn to not use.
(ede-dir-to-projectfile): Deleted.
(ede-project-autoload-dirmatch): Add subdir-only slot. Make
configdatastash unbound by default.
(ede-do-dirmatch): If subdir-only is true, then don't allow exact
matches. Account for configdatastash as unbound. Assume value of
nil means no tool installed. Make sure loaded path matches from
beginning. Stash the regexp, not the raw string.
(ede-project-class-files): Note that makefile and automake are not
root only.
(ede-auto-detect-in-dir): New (for use with `ede/detect.el').
(ede-project-dirmatch-p): Deleted.
(ede-project-root-directory): Remove body, return nil.
(ede-project-autoload): :proj-root-dirmatch can be null & doc fix.
(ede-auto-detect-in-dir): If there is no :proj-file, check for a
dirmatch.
* ede/generic.el (ede/config): Replace require of ede.
(ede-generic-new-autoloader): Generic projects are now safe by
default. Note this is NOT a root only project.
(project-rescan, ede-project-root, ede-generic-target-java)
(ede-java-classpath, ede-find-subproject-for-directory): New.
(ede-enable-generic-projects): Add new autoloaders for git, bzr,
hg, sv, CVS.
(ede-generic-vc-project)
(ede-generic-vc-project::ede-generic-setup-configuration): New.
(ede-generic-config): Remove slots: c-include-path,
c-preprocessor-table, c-preprocessor-files, classpath,
build-command, debug-command, run command. Inherit from
ede-extra-config-build, ede-extra-config-program. Make
run-command :value match :custom so only strings are accepted.
Add some more :group slot specifiers.
(ede-generic-project): Add mixins `ede-project-with-config-c' and
`ede-project-with-config-java'. Inherit from
`ede-project-with-config-build',
`ede-project-with-config-program'. Subclass
`ede-project-with-config'. Remove duplication from new baseclass.
(ede-generic-target): Inherit from `ede-target-with-config-build',
`ede-target-with-config-program'. Subclass `ede-target-with-config'.
(ede-generic-target-c-cpp): Add mixin `ede-target-with-config-c'.
(ede-generic-target-java): Add mixin `ede-target-with-config-java'.
(ede-preprocessor-map, ede-system-include-path)
(edejava-classpath): Deleted, moved to config.el.
(project-compile-project, project-compile-target)
(project-debug-target, project-run-target): Deleted.
(ede-generic-get-configuration, ede-generic-setup-configuration)
(ede-commit-project, project-rescan)
(ede-generic-project::ede-customize)
(ede-generic-target::ede-customize)
(ede-generic-config::eieio-done-customizing)
(ede-generic-config::ede-commit): Deleted. Subsumed by new
baseclass.
(ede-preprocessor-map, ede-system-include-path)
(project-debug-target, project-run-target): Call new
`ede-config-get-configuration' instead of old version.
(ede-generic-load): Do not add to global list here.
* ede/files.el (ede-find-project-root)
(ede-files-find-existing)
(ede-directory-get-toplevel-open-project-new): Deleted.
(ede-project-root-directory): Use `ede-project-root' first.
(ede-project-directory-remove-hash)
(ede--directory-project-from-hash)
(ede--directory-project-add-description-to-hash): Rename to make
internal symbols (via --). Expand input dir first.
(ede-directory-project-p): Doc fix (note obsoleted.)
(ede-toplevel-project-or-nil): Alias to `ede-toplevel-project'.
(ede-toplevel-project): Doc Fix. Delete commented out old code.
Simplify returning result from ede-detect-directory-for-project.
(ede-directory-get-open-project): Support when
inodes are disabled. If disabled to str compare on root project.
(ede-directory-get-toplevel-open-project): Enabled nested
projects. When doing directory name matching, save the 'short'
version of an answer (non-exact match) and eventually select the
shortest answer at the end. Expand the filename of tested
projects. Better support for when inodes are disabled. Add
'exact' option so that it will return a project that is an exact
match.
(ede-find-subproject-for-directory): Small optimization to run
`file-truename' less often.
(ede-directory-project-p): Move content, then use
`ede-directory-project-cons'. Use
`ede-detect-directory-for-project', replacing old detection loop.
(ede-directory-project-cons): New, from above.
(ede-toplevel-project): Toss old scanning code. Use
`ede-detect-directory-for-project' instead.
(ede-directory-get-toplevel-open-project-new): New.
* ede/linux.el (ede-linux-project-root): Deleted.
(ede-project-autoload): Remove dirmatch entry - it is no longer
needed.
* lisp/cedet/ede/proj.el (project-rescan): Replace direct
manipulation of `ede-projects' with equivalent and better
functions.
(ede-proj-load): Replace call to test if dir has project to
explicity ask filesystem if Project.ede is there.
* ede/config.el:
* ede/detect.el: New files.
* ede/project-am.el (project-run-target): Add "./" to program to
run for systems where '.' isn't in PATH.
(project-am-load): Remove old code regarding `ede-constructing'.
Just read in the makefiles.
* ede/linux.el (ede-linux-load): Do not add to global list here.
Don't check for existing anymore.
(project-rescan): New.
(ede-linux-project-list, ede-linux-file-existing): Deleted.
(ede-linux-project-root): Delete body. Need symbol for autoloads
for now.
(ede-linux-project): No longer instance tracker.
(ede-project-autoload): Don't provide :proj-root
* ede/emacs.el (ede-emacs-load): Do not add project to global list
here. Don't look for existing first.
(ede-project-autoload): Remove dirmatch entry - it is no longer
needed. Don't provide proj-root anymore.
(ede-emacs-project-list, ede-emacs-file-existing): Delete.
(ede-emacs-project-root): Remove body (need symbol for loaddefs
still).
(ede-emacs-project): Do not instance track anymore.
* ede/cpp-root.el (initialize-instance): Remove commented code.
Add note about why we are adding the project to the master list.
Make sure if we are replacing a prev version, remove from global
list.
(ede-cpp-root-file-existing)
(ede-cpp-root-project-file-for-dir)
(ede-cpp-root-count, ede-cpp-root-project-root, ede-cpp-root-load)
(ede-project-autoload cpp-root): Deleted.
(ede-project-root-directory): Return :directory instead of
calculating from :file.
(project-rescan): New.
* ede/base.el (ede-toplevel): Only use buffer cached value if
subproj not passed in.
* srecode/java.el (srecode-semantic-handle-:java): Fix case when
an EDE project didn't support java paths.
* lisp/cedet/ede/proj-elisp.el
(ede-proj-target-elisp::ede-proj-tweak-autoconf): Kill buffer
after saving modified elisp-comp script, as to avoid "file has
changed on disk; really edit the buffer" questions when script
gets rewritten.
* emacs-lisp/eieio-custom.el (eieio-customize-object): Set
eieio-cog (current group) to g, which is an improved form of input
group.
* srecode/doc-cpp.srt (mode): Set to c mode so this works with
both C and C++.
2014-11-10 01:04:30 +01:00
|
|
|
%token <punctuation> QUESTION "\\`[?]\\'"
|
2011-07-29 22:06:43 -04:00
|
|
|
%token <punctuation> EQUAL "\\`[=]\\'"
|
|
|
|
%token <punctuation> LESS "\\`[<]\\'"
|
|
|
|
%token <punctuation> GREATER "\\`[>]\\'"
|
|
|
|
%token <punctuation> COMA "\\`[,]\\'"
|
|
|
|
%token <punctuation> TILDE "\\`[~]\\'"
|
|
|
|
%token <punctuation> MOD "\\`[%]\\'"
|
|
|
|
%token <punctuation> HAT "\\`\\^\\'"
|
|
|
|
%token <punctuation> OR "\\`[|]\\'"
|
|
|
|
%token <string> C "\"C\""
|
|
|
|
%token <string> CPP "\"C\\+\\+\""
|
|
|
|
%token <number> ZERO "^0$"
|
|
|
|
%token <symbol> RESTRICT "\\<\\(__\\)?restrict\\>"
|
|
|
|
%token <open-paren> LPAREN "("
|
|
|
|
%token <close-paren> RPAREN ")"
|
|
|
|
%token <open-paren> LBRACE "{"
|
|
|
|
%token <close-paren> RBRACE "}"
|
|
|
|
%token <semantic-list> BRACK_BLCK "\\[.*\\]$"
|
|
|
|
%token <semantic-list> PAREN_BLCK "^("
|
|
|
|
%token <semantic-list> BRACE_BLCK "^{"
|
|
|
|
%token <semantic-list> VOID_BLCK "^(void)$"
|
|
|
|
%token <semantic-list> PARENS "()"
|
|
|
|
%token <semantic-list> BRACKETS "\\[\\]"
|
|
|
|
|
|
|
|
%token EXTERN "extern"
|
|
|
|
%put EXTERN summary "Declaration Modifier: extern <type> <name> ..."
|
|
|
|
%token STATIC "static"
|
|
|
|
%put STATIC summary "Declaration Modifier: static <type> <name> ..."
|
|
|
|
%token CONST "const"
|
|
|
|
%put CONST summary "Declaration Modifier: const <type> <name> ..."
|
|
|
|
%token VOLATILE "volatile"
|
|
|
|
%put VOLATILE summary "Declaration Modifier: volatile <type> <name> ..."
|
|
|
|
%token REGISTER "register"
|
|
|
|
%put REGISTER summary "Declaration Modifier: register <type> <name> ..."
|
|
|
|
%token SIGNED "signed"
|
|
|
|
%put SIGNED summary "Numeric Type Modifier: signed <numeric type> <name> ..."
|
|
|
|
%token UNSIGNED "unsigned"
|
|
|
|
%put UNSIGNED summary "Numeric Type Modifier: unsigned <numeric type> <name> ..."
|
|
|
|
|
|
|
|
%token INLINE "inline"
|
|
|
|
%put INLINE summary "Function Modifier: inline <return type> <name>(...) {...};"
|
|
|
|
%token VIRTUAL "virtual"
|
|
|
|
%put VIRTUAL summary "Method Modifier: virtual <type> <name>(...) ..."
|
|
|
|
%token MUTABLE "mutable"
|
|
|
|
%put MUTABLE summary "Member Declaration Modifier: mutable <type> <name> ..."
|
2012-10-02 02:10:29 +08:00
|
|
|
%token EXPLICIT "explicit"
|
|
|
|
%put EXPLICIT summary "Forbids implicit type conversion: explicit <constructor>"
|
2011-07-29 22:06:43 -04:00
|
|
|
|
|
|
|
%token STRUCT "struct"
|
|
|
|
%put STRUCT summary "Structure Type Declaration: struct [name] { ... };"
|
|
|
|
%token UNION "union"
|
|
|
|
%put UNION summary "Union Type Declaration: union [name] { ... };"
|
|
|
|
%token ENUM "enum"
|
|
|
|
%put ENUM summary "Enumeration Type Declaration: enum [name] { ... };"
|
|
|
|
%token TYPEDEF "typedef"
|
|
|
|
%put TYPEDEF summary "Arbitrary Type Declaration: typedef <typedeclaration> <name>;"
|
|
|
|
%token CLASS "class"
|
|
|
|
%put CLASS summary "Class Declaration: class <name>[:parents] { ... };"
|
|
|
|
%token TYPENAME "typename"
|
|
|
|
%put TYPENAME summary "typename is used to handle a qualified name as a typename;"
|
|
|
|
%token NAMESPACE "namespace"
|
|
|
|
%put NAMESPACE summary "Namespace Declaration: namespace <name> { ... };"
|
|
|
|
%token USING "using"
|
|
|
|
%put USING summary "using <namespace>;"
|
|
|
|
|
|
|
|
%token NEW "new"
|
|
|
|
%put NEW summary "new <classname>();"
|
|
|
|
%token DELETE "delete"
|
|
|
|
%put DELETE summary "delete <object>;"
|
|
|
|
|
|
|
|
;; Despite this, this parser can find templates by ignoring the TEMPLATE
|
2011-11-19 23:30:16 -08:00
|
|
|
;; keyword, and finding the class/method being templatized.
|
2011-07-29 22:06:43 -04:00
|
|
|
%token TEMPLATE "template"
|
|
|
|
%put TEMPLATE summary "template <class TYPE ...> TYPE_OR_FUNCTION"
|
|
|
|
|
|
|
|
%token THROW "throw"
|
|
|
|
%put THROW summary "<type> <methoddef> (<method args>) throw (<exception>) ..."
|
|
|
|
%token REENTRANT "reentrant"
|
|
|
|
%put REENTRANT summary "<type> <methoddef> (<method args>) reentrant ..."
|
|
|
|
%token TRY "try"
|
|
|
|
%token CATCH "catch"
|
|
|
|
%put { TRY CATCH } summary "try { <body> } catch { <catch code> }"
|
|
|
|
|
|
|
|
;; Leave these alone for now.
|
|
|
|
%token OPERATOR "operator"
|
|
|
|
%token PUBLIC "public"
|
|
|
|
%token PRIVATE "private"
|
|
|
|
%token PROTECTED "protected"
|
|
|
|
%token FRIEND "friend"
|
|
|
|
%put FRIEND summary "friend class <CLASSNAME>"
|
|
|
|
|
|
|
|
;; These aren't used for parsing, but is a useful place to describe the keywords.
|
|
|
|
%token IF "if"
|
|
|
|
%token ELSE "else"
|
|
|
|
%put {IF ELSE} summary "if (<condition>) { code } [ else { code } ]"
|
|
|
|
|
|
|
|
%token DO "do"
|
|
|
|
%token WHILE "while"
|
|
|
|
%put DO summary " do { code } while (<condition>);"
|
|
|
|
%put WHILE summary "do { code } while (<condition>); or while (<condition>) { code };"
|
|
|
|
|
|
|
|
%token FOR "for"
|
|
|
|
%put FOR summary "for(<init>; <condition>; <increment>) { code }"
|
|
|
|
|
|
|
|
%token SWITCH "switch"
|
|
|
|
%token CASE "case"
|
|
|
|
%token DEFAULT "default"
|
|
|
|
%put {SWITCH CASE DEFAULT} summary
|
|
|
|
"switch (<variable>) { case <constvalue>: code; ... default: code; }"
|
|
|
|
|
|
|
|
%token RETURN "return"
|
|
|
|
%put RETURN summary "return <value>;"
|
|
|
|
|
|
|
|
%token BREAK "break"
|
|
|
|
%put BREAK summary "Non-local exit within a loop or switch (for, do/while, switch): break;"
|
|
|
|
%token CONTINUE "continue"
|
|
|
|
%put CONTINUE summary "Non-local continue within a loop (for, do/while): continue;"
|
|
|
|
|
|
|
|
%token SIZEOF "sizeof"
|
|
|
|
%put SIZEOF summary "Compile time macro: sizeof(<type or variable>) // size in bytes"
|
|
|
|
|
|
|
|
;; Types
|
|
|
|
%token VOID "void"
|
2019-10-14 21:36:14 +02:00
|
|
|
%put VOID summary "Built in type: void"
|
2011-07-29 22:06:43 -04:00
|
|
|
%token CHAR "char"
|
|
|
|
%put CHAR summary "Integral Character Type: (0 to 256)"
|
|
|
|
%token WCHAR "wchar_t"
|
|
|
|
%put WCHAR summary "Wide Character Type"
|
|
|
|
%token SHORT "short"
|
|
|
|
%put SHORT summary "Integral Primitive Type: (-32768 to 32767)"
|
|
|
|
%token INT "int"
|
|
|
|
%put INT summary "Integral Primitive Type: (-2147483648 to 2147483647)"
|
|
|
|
%token LONG "long"
|
|
|
|
%put LONG summary "Integral primitive type (-9223372036854775808 to 9223372036854775807)"
|
|
|
|
%token FLOAT "float"
|
|
|
|
%put FLOAT summary "Primitive floating-point type (single-precision 32-bit IEEE 754)"
|
|
|
|
%token DOUBLE "double"
|
|
|
|
%put DOUBLE summary "Primitive floating-point type (double-precision 64-bit IEEE 754)"
|
|
|
|
%token BOOL "bool"
|
|
|
|
%put BOOL summary "Primitive boolean type"
|
|
|
|
|
|
|
|
%token UNDERP "_P"
|
|
|
|
%token UNDERUNDERP "__P"
|
|
|
|
%put UNDERP summary "Common macro to eliminate prototype compatibility on some compilers"
|
|
|
|
%put UNDERUNDERP summary "Common macro to eliminate prototype compatibility on some compilers"
|
|
|
|
|
|
|
|
%%
|
|
|
|
|
|
|
|
declaration
|
|
|
|
: macro
|
|
|
|
| type
|
|
|
|
;; TODO: Klaus Berndl: Is the define here necessary or even wrong?
|
|
|
|
;; Is this part not already covered by macro??
|
|
|
|
| define
|
|
|
|
| var-or-fun
|
|
|
|
| extern-c
|
|
|
|
| template
|
|
|
|
| using
|
|
|
|
;
|
|
|
|
|
|
|
|
codeblock
|
|
|
|
: define
|
|
|
|
| codeblock-var-or-fun
|
|
|
|
| type ;; type is less likely to be used here.
|
|
|
|
| using
|
|
|
|
;
|
|
|
|
|
|
|
|
extern-c-contents
|
|
|
|
: open-paren
|
|
|
|
( nil )
|
|
|
|
| declaration
|
|
|
|
| close-paren
|
|
|
|
( nil )
|
|
|
|
;
|
|
|
|
|
|
|
|
extern-c
|
|
|
|
: EXTERN C semantic-list
|
|
|
|
;; Extern C commands which contain a list need to have the
|
|
|
|
;; entries of the list extracted, and spliced into the main
|
|
|
|
;; list of entries. This must be done via the function
|
|
|
|
;; that expands singular nonterminals, such as int x,y;
|
|
|
|
(TAG "C" 'extern :members (EXPANDFULL $3 extern-c-contents) )
|
|
|
|
| EXTERN CPP semantic-list
|
|
|
|
(TAG "C" 'extern :members (EXPANDFULL $3 extern-c-contents) )
|
|
|
|
| EXTERN C
|
|
|
|
;; A plain extern "C" call should add something to the token,
|
|
|
|
;; but just strip it from the buffer here for now.
|
|
|
|
( nil )
|
|
|
|
| EXTERN CPP
|
|
|
|
( nil )
|
|
|
|
;
|
|
|
|
|
|
|
|
macro
|
|
|
|
: spp-macro-def
|
|
|
|
(VARIABLE-TAG $1 nil nil :constant-flag t )
|
|
|
|
| spp-system-include
|
|
|
|
(INCLUDE-TAG $1 t)
|
|
|
|
| spp-include
|
|
|
|
(INCLUDE-TAG $1 nil)
|
|
|
|
;
|
|
|
|
|
|
|
|
;; This is used in struct parts.
|
|
|
|
define
|
|
|
|
: spp-macro-def
|
|
|
|
(VARIABLE-TAG $1 nil nil :constant-flag t)
|
|
|
|
| spp-macro-undef
|
|
|
|
( nil )
|
|
|
|
;
|
|
|
|
|
|
|
|
;; In C++, structures can have the same things as classes.
|
2011-12-30 17:27:15 -08:00
|
|
|
;; So delete this some day in the figure.
|
2011-07-29 22:06:43 -04:00
|
|
|
;;
|
|
|
|
;;structparts : semantic-list
|
|
|
|
;; (EXPANDFULL $1 structsubparts)
|
|
|
|
;; ;
|
|
|
|
;;
|
|
|
|
;;structsubparts : LBRACE
|
|
|
|
;; ( nil )
|
|
|
|
;; | RBRACE
|
|
|
|
;; ( nil )
|
|
|
|
;; | var-or-fun
|
|
|
|
;; | define
|
|
|
|
;; ;; sometimes there are defines in structs.
|
|
|
|
;; ;
|
|
|
|
|
|
|
|
unionparts
|
|
|
|
: semantic-list
|
|
|
|
(EXPANDFULL $1 classsubparts)
|
|
|
|
;
|
|
|
|
|
|
|
|
opt-symbol
|
|
|
|
: symbol
|
|
|
|
| ;;EMPTY
|
|
|
|
;
|
|
|
|
|
|
|
|
;; @todo - support 'friend' construct.
|
|
|
|
classsubparts
|
|
|
|
: LBRACE
|
|
|
|
( nil )
|
|
|
|
| RBRACE
|
|
|
|
( nil )
|
|
|
|
| class-protection opt-symbol COLON
|
|
|
|
;; For QT, they may put a `slot' keyword between the protection
|
|
|
|
;; and the COLON. @todo - Have the QT stuff use macros.
|
|
|
|
(TAG (car $1) 'label)
|
|
|
|
| var-or-fun
|
|
|
|
| FRIEND func-decl
|
|
|
|
(TAG (car $2) 'friend)
|
|
|
|
| FRIEND CLASS symbol
|
|
|
|
(TAG $3 'friend)
|
|
|
|
| type
|
|
|
|
| define
|
|
|
|
| template
|
|
|
|
| ;;EMPTY
|
|
|
|
;
|
|
|
|
|
|
|
|
opt-class-parents
|
|
|
|
: COLON class-parents opt-template-specifier
|
|
|
|
( $2 )
|
|
|
|
| ;;EMPTY
|
|
|
|
( )
|
|
|
|
;
|
|
|
|
|
|
|
|
one-class-parent
|
|
|
|
: opt-class-protection opt-class-declmods namespace-symbol
|
|
|
|
(TYPE-TAG (car $3) "class" nil nil :protection (car $1))
|
|
|
|
| opt-class-declmods opt-class-protection namespace-symbol
|
|
|
|
(TYPE-TAG (car $3) "class" nil nil :protection (car $2))
|
|
|
|
;
|
|
|
|
|
|
|
|
class-parents
|
|
|
|
: one-class-parent COMA class-parents
|
|
|
|
( ,(cons ,$1 $3 ) )
|
|
|
|
| one-class-parent
|
|
|
|
( $1 )
|
|
|
|
;
|
|
|
|
|
|
|
|
opt-class-declmods
|
|
|
|
: class-declmods opt-class-declmods
|
|
|
|
( nil )
|
|
|
|
| ;;EMPTY
|
|
|
|
;
|
|
|
|
|
|
|
|
class-declmods
|
|
|
|
: VIRTUAL
|
|
|
|
;
|
|
|
|
|
|
|
|
class-protection
|
|
|
|
: PUBLIC
|
|
|
|
| PRIVATE
|
|
|
|
| PROTECTED
|
|
|
|
;
|
|
|
|
|
|
|
|
opt-class-protection
|
|
|
|
: class-protection
|
|
|
|
( ,$1 )
|
|
|
|
| ;;EMPTY - Same as private
|
|
|
|
( "unspecified" )
|
|
|
|
;
|
|
|
|
|
|
|
|
namespaceparts
|
|
|
|
: semantic-list
|
|
|
|
(EXPANDFULL $1 namespacesubparts)
|
|
|
|
;
|
|
|
|
|
|
|
|
namespacesubparts
|
|
|
|
: LBRACE
|
|
|
|
( nil )
|
|
|
|
| RBRACE
|
|
|
|
( nil )
|
|
|
|
| type
|
|
|
|
| var-or-fun
|
|
|
|
| define
|
|
|
|
| class-protection COLON
|
|
|
|
(TAG (car $1) 'label)
|
|
|
|
;; In C++, this label in a classsubpart represents
|
|
|
|
;; PUBLIC or PRIVATE bits. Ignore them for now.
|
|
|
|
| template
|
|
|
|
| using
|
2012-10-02 02:10:29 +08:00
|
|
|
;; Includes inside namespaces
|
|
|
|
| spp-include
|
|
|
|
(TAG $1 'include :inside-ns t)
|
2011-07-29 22:06:43 -04:00
|
|
|
| ;;EMPTY
|
|
|
|
;
|
|
|
|
|
|
|
|
enumparts
|
|
|
|
: semantic-list
|
|
|
|
(EXPANDFULL $1 enumsubparts)
|
|
|
|
;
|
|
|
|
|
|
|
|
enumsubparts
|
|
|
|
: symbol opt-assign
|
|
|
|
(VARIABLE-TAG $1 "int" (car $2) :constant-flag t )
|
|
|
|
| LBRACE
|
|
|
|
( nil )
|
|
|
|
| RBRACE
|
|
|
|
( nil )
|
|
|
|
| COMA
|
|
|
|
( nil )
|
|
|
|
;
|
|
|
|
|
|
|
|
opt-name
|
|
|
|
: symbol
|
|
|
|
| ;;EMPTY
|
|
|
|
( "" )
|
|
|
|
;
|
|
|
|
|
|
|
|
typesimple
|
|
|
|
: struct-or-class opt-class opt-name opt-template-specifier
|
|
|
|
opt-class-parents semantic-list
|
|
|
|
(TYPE-TAG (car $3) (car $1)
|
|
|
|
(let ((semantic-c-classname (cons (car ,$3) (car ,$1))))
|
|
|
|
(EXPANDFULL $6 classsubparts))
|
|
|
|
$5
|
|
|
|
:template-specifier $4
|
|
|
|
:parent (car ,$2))
|
|
|
|
| struct-or-class opt-class opt-name opt-template-specifier
|
|
|
|
opt-class-parents
|
|
|
|
(TYPE-TAG (car $3) (car $1) nil $5
|
|
|
|
:template-specifier $4
|
|
|
|
:prototype t
|
|
|
|
:parent (car ,$2))
|
|
|
|
| UNION opt-class opt-name unionparts
|
|
|
|
(TYPE-TAG (car $3) $1 $4 nil
|
|
|
|
:parent (car ,$2))
|
|
|
|
| ENUM opt-class opt-name enumparts
|
|
|
|
(TYPE-TAG (car $3) $1 $4 nil
|
|
|
|
:parent (car ,$2))
|
|
|
|
;; Klaus Berndl: a typedef can be a typeformbase with all this
|
|
|
|
;; declmods stuff.
|
|
|
|
| TYPEDEF declmods typeformbase cv-declmods typedef-symbol-list
|
|
|
|
;;;; We put the type this typedef renames into PARENT
|
|
|
|
;;;; but will move it in the expand function.
|
|
|
|
(TYPE-TAG $5 $1 nil (list $3) )
|
|
|
|
;
|
|
|
|
|
|
|
|
typedef-symbol-list
|
|
|
|
: typedefname COMA typedef-symbol-list
|
|
|
|
( ,(cons $1 $3) )
|
|
|
|
| typedefname
|
|
|
|
( $1 )
|
|
|
|
;
|
|
|
|
|
|
|
|
;; TODO: Klaus Berndl: symbol -> namespace-symbol?! Answer: Probably
|
|
|
|
;; symbol is correct here!
|
|
|
|
typedefname
|
|
|
|
: opt-stars symbol opt-bits opt-array
|
|
|
|
( $1 $2 )
|
|
|
|
;
|
|
|
|
|
|
|
|
struct-or-class
|
|
|
|
: STRUCT
|
|
|
|
| CLASS
|
|
|
|
;
|
|
|
|
|
|
|
|
type
|
|
|
|
: typesimple SEMICOLON
|
|
|
|
( ,$1 )
|
|
|
|
;; named namespaces like "namespace XXX {"
|
|
|
|
| NAMESPACE symbol namespaceparts
|
|
|
|
(TYPE-TAG $2 $1 $3 nil )
|
|
|
|
;; unnamed namespaces like "namespace {"
|
|
|
|
| NAMESPACE namespaceparts
|
|
|
|
(TYPE-TAG "unnamed" $1 $2 nil )
|
|
|
|
;; David Engster: namespace alias like "namespace foo = bar;"
|
|
|
|
| NAMESPACE symbol EQUAL typeformbase SEMICOLON
|
|
|
|
(TYPE-TAG $2 $1 (list (TYPE-TAG (car $4) $1 nil nil)) nil :kind 'alias )
|
|
|
|
;
|
|
|
|
|
|
|
|
;; Klaus Berndl: We must parse "using namespace XXX" too
|
|
|
|
|
|
|
|
;; Using is vaguely like an include statement in the named portions
|
|
|
|
;; of the code. We should probably specify a new token type for this.
|
|
|
|
|
|
|
|
using
|
|
|
|
: USING usingname SEMICOLON
|
|
|
|
(TAG (car $2) 'using :type ,$2 )
|
|
|
|
;
|
|
|
|
|
|
|
|
;; Jan Moringen: Differentiate between 'using' and 'using namespace'
|
|
|
|
;; Adapted to creating type tags by EML.
|
|
|
|
usingname
|
|
|
|
: typeformbase
|
|
|
|
(TYPE-TAG (car $1) "class" nil nil :prototype t)
|
|
|
|
| NAMESPACE typeformbase
|
|
|
|
(TYPE-TAG (car $2) "namespace" nil nil :prototype t)
|
|
|
|
;
|
|
|
|
|
|
|
|
template
|
|
|
|
: TEMPLATE template-specifier opt-friend template-definition
|
|
|
|
( ,(semantic-c-reconstitute-template $4 ,$2) )
|
|
|
|
;
|
|
|
|
|
|
|
|
opt-friend
|
|
|
|
: FRIEND
|
|
|
|
| ;;EMPTY
|
|
|
|
;
|
|
|
|
|
|
|
|
opt-template-specifier
|
|
|
|
: template-specifier
|
|
|
|
( ,$1 )
|
|
|
|
| ;;EMPTY
|
|
|
|
( )
|
|
|
|
;
|
|
|
|
|
|
|
|
template-specifier
|
|
|
|
: LESS template-specifier-types GREATER
|
|
|
|
( ,$2 )
|
|
|
|
;
|
|
|
|
|
|
|
|
template-specifier-types
|
|
|
|
: template-var template-specifier-type-list
|
|
|
|
( ,(cons ,$1 ,$2 ) )
|
|
|
|
| ;;EMPTY
|
|
|
|
;
|
|
|
|
|
|
|
|
template-specifier-type-list
|
|
|
|
: COMA template-specifier-types
|
|
|
|
( ,$2 )
|
|
|
|
| ;;EMPTY
|
|
|
|
( )
|
|
|
|
;
|
|
|
|
|
|
|
|
;; template-var
|
|
|
|
;; : template-type opt-stars opt-template-equal
|
|
|
|
;; ( ,(cons (concat (car $1) (make-string (car ,$2) ?*))
|
|
|
|
;; (cdr $1)))
|
|
|
|
;; ;; Klaus Berndl: for template-types the template-var can also be
|
|
|
|
;; ;; literals or constants. Example: map<ClassX, ClassY, 10>
|
|
|
|
;; ;; map_size10_var; This parses also template<class T, 0> which is
|
|
|
|
;; ;; nonsense but who cares....
|
|
|
|
;; | string
|
|
|
|
;; ( $1 )
|
|
|
|
;; | number
|
|
|
|
;; ( $1 )
|
|
|
|
;; ;
|
|
|
|
|
|
|
|
template-var
|
|
|
|
:
|
|
|
|
;; Klaus Berndl: The following handles all template-vars of
|
|
|
|
;; template-definitions
|
|
|
|
template-type opt-template-equal
|
|
|
|
( ,(cons (car $1) (cdr $1)) )
|
|
|
|
;; Klaus Berndl: for template-types the template-var can also be
|
|
|
|
;; literals or constants.
|
|
|
|
;; Example: map<ClassX, ClassY, 10> map_size10_var; This parses also
|
|
|
|
;; template<class T, 0> which is nonsense but who cares....
|
|
|
|
| string
|
|
|
|
( $1 )
|
|
|
|
| number
|
|
|
|
( $1 )
|
|
|
|
;; Klaus Berndl: In template-types arguments can be any symbols with
|
|
|
|
;; optional address-operator (&) and optional dereferencing operator
|
|
|
|
;; (*). Example map<ClassX, ClassY, *size_var_ptr> sized_map_var.
|
|
|
|
| opt-stars opt-ref namespace-symbol
|
|
|
|
( ,$3 )
|
|
|
|
;; Some code can compile down into a number, but starts out as an
|
|
|
|
;; expression, such as "sizeof(a)", or (sizeof(a)/sizeof(b))
|
|
|
|
| semantic-list
|
|
|
|
( $1 )
|
|
|
|
| SIZEOF semantic-list
|
|
|
|
( $2 )
|
|
|
|
;
|
|
|
|
|
|
|
|
opt-template-equal
|
|
|
|
: EQUAL symbol LESS template-specifier-types GREATER
|
|
|
|
( $2 )
|
|
|
|
| EQUAL symbol
|
|
|
|
( $2 )
|
|
|
|
| ;;EMPTY
|
|
|
|
( )
|
|
|
|
;
|
|
|
|
|
|
|
|
template-type
|
|
|
|
: CLASS symbol
|
|
|
|
(TYPE-TAG $2 "class" nil nil )
|
|
|
|
| STRUCT symbol
|
|
|
|
(TYPE-TAG $2 "struct" nil nil )
|
2011-11-16 13:34:47 +01:00
|
|
|
;; TODO: Klaus Berndl: For the moment it is ok, that we parse the C++
|
2011-07-29 22:06:43 -04:00
|
|
|
;; keyword typename as a class....
|
|
|
|
| TYPENAME symbol
|
|
|
|
(TYPE-TAG $2 "class" nil nil)
|
|
|
|
;; Klaus Berndl: template-types can be all flavors of variable-args
|
|
|
|
;; but here the argument is ignored, only the type stuff is needed.
|
|
|
|
| declmods typeformbase cv-declmods opt-stars
|
|
|
|
opt-ref variablearg-opt-name
|
|
|
|
(TYPE-TAG (car $2) nil nil nil
|
Update from CEDET trunk.
* grammars/c.by (template-type): Add :template-specifier and
:typevar to capture extra details about the template.
(opt-post-fcn-modifiers): Splice in the found symbol into the
return value correctly.
(QUESTION): New punctuation.
(expression): Add ternary conditional support.
* grammars/scheme.by (MODULE): New token.
(scheme): Handle expanding the MODULE tag.
(scheme-list): Remove closeparen required match.
(scheme-in-list): Remove extraneous matches for DEFINE. Add
support for MODULE Simplify matching for code & make work.
(name-args, name-arg-list, name-arg-expand): Make it work.
* semantic.el (semantic-mode): Add/remove 3
completion-at-point-functions.
(semantic-completion-at-point-function): Removed.
(semantic-analyze-completion-at-point-function)
(semantic-analyze-notc-completion-at-point-function)
(semantic-analyze-nolongprefix-completion-at-point-function): New
completion at point functions.
* semantic/doc.el (semantic-doc-snarf-comment-for-tag): Fix case
when comment-end is empty string.
* semantic/debug.el
(semantic-debug-parser-debugger-source): New buffer local
variable.
(semantic-debug-interface): Add 'nil' initform to overlays.
(semantic-debug-mode): Remove read-only tags from buffers on exit.
(semantic-debug): Add autoload cookie. Force the language
specific debugger to load.
* semantic/db.el (generic::semanticdb-full-filename): New generic
method to allow this method to be used on buffer names via an
associated database.
* semantic/symref.el
(semantic-symref-cleanup-recent-buffers-fcn): When cleaning up
buffers, don't clean up buffers that are being used (i.e., in a
window) when the hook fires.
(semantic-symref-recently-opened-buffers): New tracking variable.
(semantic-symref-cleanup-recent-buffers-fcn): New hook fcn.
(semantic-symref-result-get-tags): Move logic into
`semantic-symref-hit-to-tag-via-buffer', and cleanup buffers via
the symref cleanup function in post-command-hook.
(semantic-symref-hit-to-tag-via-buffer): Logic that used to be
from above.
(semantic-symref-hit-to-tag-via-db): New.
* semantic/analyze.el:
(semantic-analyze-find-tag-sequence-default): If first entry in
sequence is the only one, apply tagclass filter.
(semantic-analyze-princ-sequence): Show slot even if empty.
(semantic-analyze-find-tag-sequence)
(semantic-analyze-find-tag-sequence-default): Add flags argument.
Add support for forcing the final entry of the sequence to be of
class variable.
(semantic-analyze-find-tag): Fix bug where input class filter was
ignored if there was a typecache match.
(semantic-analyze-current-context-default): For assignments, the
assignee now must be of class variable.
* semantic/analyze/complete.el
(semantic-analyze-possible-completions-default): Add
'no-longprefix' flag. When used, the prefix and prefixtypes are
shortened to just the last symbol.
* semantic/bovine/c.el (semantic-c-do-lex-if): Catch errors from
'hideif', and push to the parser warning stack.
(semantic-lex-cpp-define): When a comment is at the end of a
macro, do not subtract an extra 1 from the found position. Fixes
bug with: #define foo (a)/**/ adding an extra ')' to the stream.
* semantic/bovine/scm.el (semantic-lex-scheme-symbol): Allow
symbols to be one char long.
* semantic/bovine/grammar.el
(bovine-grammar-calculate-source-on-path): New.
(bovine-grammar-setupcode-builder): Use it.
* ede.el (ede/detect): New require.
(ede-version): Bump version
(ede-initialize-state-current-buffer): Use new
`ede-detect-directory-for-project' to detect projects first
instead of depending on currente dir only.
(ede-delete-project-from-global-list): New.
(ede-flush-deleted-projects): Use above.
(ede-check-project-query-fcn): New variable
(ede-check-project-directory): Use above when querying the user.
Added to support unit testing of this security measure.
(ede-initialize-state-current-buffer): Use
`ede-directory-project-cons' instead of the -detect- fcn to take
advantage of the cache. Pass found project into
`ede-load-project-file'.
(ede-load-project-file): Add new input DETECTIN.
(ede-rescan-toplevel): Get the proj root a better way.
(ede-load-project-file): Return the loaded object. When asking
for existing project, ask for an exact match.
(ede-initialize-state-current-buffer): Simplify some conditional
logic.
(ede-load-project-file): Simplify conditional logic.
(ede-global-list-sanity-check): New Testing fcn.
(ede-parent-project): Replace old code with call to faster
`ede-find-subproject-for-directory'.
(ede-load-project-file): Use
`ede-directory-get-toplevel-open-project' instead of above
deleted. Rename "pfc" to "autoloader". Use
`ede-directory-project-cons' to detect a project. Delete no
project found case where we search up the tree.
* ede/auto.el (ede-project-autoload): Fix doc typo. Add
`:root-only' slot.
(ede-auto-load-project): Doc update: warn to not use.
(ede-dir-to-projectfile): Deleted.
(ede-project-autoload-dirmatch): Add subdir-only slot. Make
configdatastash unbound by default.
(ede-do-dirmatch): If subdir-only is true, then don't allow exact
matches. Account for configdatastash as unbound. Assume value of
nil means no tool installed. Make sure loaded path matches from
beginning. Stash the regexp, not the raw string.
(ede-project-class-files): Note that makefile and automake are not
root only.
(ede-auto-detect-in-dir): New (for use with `ede/detect.el').
(ede-project-dirmatch-p): Deleted.
(ede-project-root-directory): Remove body, return nil.
(ede-project-autoload): :proj-root-dirmatch can be null & doc fix.
(ede-auto-detect-in-dir): If there is no :proj-file, check for a
dirmatch.
* ede/generic.el (ede/config): Replace require of ede.
(ede-generic-new-autoloader): Generic projects are now safe by
default. Note this is NOT a root only project.
(project-rescan, ede-project-root, ede-generic-target-java)
(ede-java-classpath, ede-find-subproject-for-directory): New.
(ede-enable-generic-projects): Add new autoloaders for git, bzr,
hg, sv, CVS.
(ede-generic-vc-project)
(ede-generic-vc-project::ede-generic-setup-configuration): New.
(ede-generic-config): Remove slots: c-include-path,
c-preprocessor-table, c-preprocessor-files, classpath,
build-command, debug-command, run command. Inherit from
ede-extra-config-build, ede-extra-config-program. Make
run-command :value match :custom so only strings are accepted.
Add some more :group slot specifiers.
(ede-generic-project): Add mixins `ede-project-with-config-c' and
`ede-project-with-config-java'. Inherit from
`ede-project-with-config-build',
`ede-project-with-config-program'. Subclass
`ede-project-with-config'. Remove duplication from new baseclass.
(ede-generic-target): Inherit from `ede-target-with-config-build',
`ede-target-with-config-program'. Subclass `ede-target-with-config'.
(ede-generic-target-c-cpp): Add mixin `ede-target-with-config-c'.
(ede-generic-target-java): Add mixin `ede-target-with-config-java'.
(ede-preprocessor-map, ede-system-include-path)
(edejava-classpath): Deleted, moved to config.el.
(project-compile-project, project-compile-target)
(project-debug-target, project-run-target): Deleted.
(ede-generic-get-configuration, ede-generic-setup-configuration)
(ede-commit-project, project-rescan)
(ede-generic-project::ede-customize)
(ede-generic-target::ede-customize)
(ede-generic-config::eieio-done-customizing)
(ede-generic-config::ede-commit): Deleted. Subsumed by new
baseclass.
(ede-preprocessor-map, ede-system-include-path)
(project-debug-target, project-run-target): Call new
`ede-config-get-configuration' instead of old version.
(ede-generic-load): Do not add to global list here.
* ede/files.el (ede-find-project-root)
(ede-files-find-existing)
(ede-directory-get-toplevel-open-project-new): Deleted.
(ede-project-root-directory): Use `ede-project-root' first.
(ede-project-directory-remove-hash)
(ede--directory-project-from-hash)
(ede--directory-project-add-description-to-hash): Rename to make
internal symbols (via --). Expand input dir first.
(ede-directory-project-p): Doc fix (note obsoleted.)
(ede-toplevel-project-or-nil): Alias to `ede-toplevel-project'.
(ede-toplevel-project): Doc Fix. Delete commented out old code.
Simplify returning result from ede-detect-directory-for-project.
(ede-directory-get-open-project): Support when
inodes are disabled. If disabled to str compare on root project.
(ede-directory-get-toplevel-open-project): Enabled nested
projects. When doing directory name matching, save the 'short'
version of an answer (non-exact match) and eventually select the
shortest answer at the end. Expand the filename of tested
projects. Better support for when inodes are disabled. Add
'exact' option so that it will return a project that is an exact
match.
(ede-find-subproject-for-directory): Small optimization to run
`file-truename' less often.
(ede-directory-project-p): Move content, then use
`ede-directory-project-cons'. Use
`ede-detect-directory-for-project', replacing old detection loop.
(ede-directory-project-cons): New, from above.
(ede-toplevel-project): Toss old scanning code. Use
`ede-detect-directory-for-project' instead.
(ede-directory-get-toplevel-open-project-new): New.
* ede/linux.el (ede-linux-project-root): Deleted.
(ede-project-autoload): Remove dirmatch entry - it is no longer
needed.
* lisp/cedet/ede/proj.el (project-rescan): Replace direct
manipulation of `ede-projects' with equivalent and better
functions.
(ede-proj-load): Replace call to test if dir has project to
explicity ask filesystem if Project.ede is there.
* ede/config.el:
* ede/detect.el: New files.
* ede/project-am.el (project-run-target): Add "./" to program to
run for systems where '.' isn't in PATH.
(project-am-load): Remove old code regarding `ede-constructing'.
Just read in the makefiles.
* ede/linux.el (ede-linux-load): Do not add to global list here.
Don't check for existing anymore.
(project-rescan): New.
(ede-linux-project-list, ede-linux-file-existing): Deleted.
(ede-linux-project-root): Delete body. Need symbol for autoloads
for now.
(ede-linux-project): No longer instance tracker.
(ede-project-autoload): Don't provide :proj-root
* ede/emacs.el (ede-emacs-load): Do not add project to global list
here. Don't look for existing first.
(ede-project-autoload): Remove dirmatch entry - it is no longer
needed. Don't provide proj-root anymore.
(ede-emacs-project-list, ede-emacs-file-existing): Delete.
(ede-emacs-project-root): Remove body (need symbol for loaddefs
still).
(ede-emacs-project): Do not instance track anymore.
* ede/cpp-root.el (initialize-instance): Remove commented code.
Add note about why we are adding the project to the master list.
Make sure if we are replacing a prev version, remove from global
list.
(ede-cpp-root-file-existing)
(ede-cpp-root-project-file-for-dir)
(ede-cpp-root-count, ede-cpp-root-project-root, ede-cpp-root-load)
(ede-project-autoload cpp-root): Deleted.
(ede-project-root-directory): Return :directory instead of
calculating from :file.
(project-rescan): New.
* ede/base.el (ede-toplevel): Only use buffer cached value if
subproj not passed in.
* srecode/java.el (srecode-semantic-handle-:java): Fix case when
an EDE project didn't support java paths.
* lisp/cedet/ede/proj-elisp.el
(ede-proj-target-elisp::ede-proj-tweak-autoconf): Kill buffer
after saving modified elisp-comp script, as to avoid "file has
changed on disk; really edit the buffer" questions when script
gets rewritten.
* emacs-lisp/eieio-custom.el (eieio-customize-object): Set
eieio-cog (current group) to g, which is an improved form of input
group.
* srecode/doc-cpp.srt (mode): Set to c mode so this works with
both C and C++.
2014-11-10 01:04:30 +01:00
|
|
|
:template-specifier (plist-get (nth 2 $2) :template-specifier)
|
2011-07-29 22:06:43 -04:00
|
|
|
:constant-flag (if (member "const" (append $1 $3)) t nil)
|
|
|
|
:typemodifiers (delete "const" (append $1 $3))
|
|
|
|
:reference (car ,$5)
|
|
|
|
:pointer (car $4)
|
Update from CEDET trunk.
* grammars/c.by (template-type): Add :template-specifier and
:typevar to capture extra details about the template.
(opt-post-fcn-modifiers): Splice in the found symbol into the
return value correctly.
(QUESTION): New punctuation.
(expression): Add ternary conditional support.
* grammars/scheme.by (MODULE): New token.
(scheme): Handle expanding the MODULE tag.
(scheme-list): Remove closeparen required match.
(scheme-in-list): Remove extraneous matches for DEFINE. Add
support for MODULE Simplify matching for code & make work.
(name-args, name-arg-list, name-arg-expand): Make it work.
* semantic.el (semantic-mode): Add/remove 3
completion-at-point-functions.
(semantic-completion-at-point-function): Removed.
(semantic-analyze-completion-at-point-function)
(semantic-analyze-notc-completion-at-point-function)
(semantic-analyze-nolongprefix-completion-at-point-function): New
completion at point functions.
* semantic/doc.el (semantic-doc-snarf-comment-for-tag): Fix case
when comment-end is empty string.
* semantic/debug.el
(semantic-debug-parser-debugger-source): New buffer local
variable.
(semantic-debug-interface): Add 'nil' initform to overlays.
(semantic-debug-mode): Remove read-only tags from buffers on exit.
(semantic-debug): Add autoload cookie. Force the language
specific debugger to load.
* semantic/db.el (generic::semanticdb-full-filename): New generic
method to allow this method to be used on buffer names via an
associated database.
* semantic/symref.el
(semantic-symref-cleanup-recent-buffers-fcn): When cleaning up
buffers, don't clean up buffers that are being used (i.e., in a
window) when the hook fires.
(semantic-symref-recently-opened-buffers): New tracking variable.
(semantic-symref-cleanup-recent-buffers-fcn): New hook fcn.
(semantic-symref-result-get-tags): Move logic into
`semantic-symref-hit-to-tag-via-buffer', and cleanup buffers via
the symref cleanup function in post-command-hook.
(semantic-symref-hit-to-tag-via-buffer): Logic that used to be
from above.
(semantic-symref-hit-to-tag-via-db): New.
* semantic/analyze.el:
(semantic-analyze-find-tag-sequence-default): If first entry in
sequence is the only one, apply tagclass filter.
(semantic-analyze-princ-sequence): Show slot even if empty.
(semantic-analyze-find-tag-sequence)
(semantic-analyze-find-tag-sequence-default): Add flags argument.
Add support for forcing the final entry of the sequence to be of
class variable.
(semantic-analyze-find-tag): Fix bug where input class filter was
ignored if there was a typecache match.
(semantic-analyze-current-context-default): For assignments, the
assignee now must be of class variable.
* semantic/analyze/complete.el
(semantic-analyze-possible-completions-default): Add
'no-longprefix' flag. When used, the prefix and prefixtypes are
shortened to just the last symbol.
* semantic/bovine/c.el (semantic-c-do-lex-if): Catch errors from
'hideif', and push to the parser warning stack.
(semantic-lex-cpp-define): When a comment is at the end of a
macro, do not subtract an extra 1 from the found position. Fixes
bug with: #define foo (a)/**/ adding an extra ')' to the stream.
* semantic/bovine/scm.el (semantic-lex-scheme-symbol): Allow
symbols to be one char long.
* semantic/bovine/grammar.el
(bovine-grammar-calculate-source-on-path): New.
(bovine-grammar-setupcode-builder): Use it.
* ede.el (ede/detect): New require.
(ede-version): Bump version
(ede-initialize-state-current-buffer): Use new
`ede-detect-directory-for-project' to detect projects first
instead of depending on currente dir only.
(ede-delete-project-from-global-list): New.
(ede-flush-deleted-projects): Use above.
(ede-check-project-query-fcn): New variable
(ede-check-project-directory): Use above when querying the user.
Added to support unit testing of this security measure.
(ede-initialize-state-current-buffer): Use
`ede-directory-project-cons' instead of the -detect- fcn to take
advantage of the cache. Pass found project into
`ede-load-project-file'.
(ede-load-project-file): Add new input DETECTIN.
(ede-rescan-toplevel): Get the proj root a better way.
(ede-load-project-file): Return the loaded object. When asking
for existing project, ask for an exact match.
(ede-initialize-state-current-buffer): Simplify some conditional
logic.
(ede-load-project-file): Simplify conditional logic.
(ede-global-list-sanity-check): New Testing fcn.
(ede-parent-project): Replace old code with call to faster
`ede-find-subproject-for-directory'.
(ede-load-project-file): Use
`ede-directory-get-toplevel-open-project' instead of above
deleted. Rename "pfc" to "autoloader". Use
`ede-directory-project-cons' to detect a project. Delete no
project found case where we search up the tree.
* ede/auto.el (ede-project-autoload): Fix doc typo. Add
`:root-only' slot.
(ede-auto-load-project): Doc update: warn to not use.
(ede-dir-to-projectfile): Deleted.
(ede-project-autoload-dirmatch): Add subdir-only slot. Make
configdatastash unbound by default.
(ede-do-dirmatch): If subdir-only is true, then don't allow exact
matches. Account for configdatastash as unbound. Assume value of
nil means no tool installed. Make sure loaded path matches from
beginning. Stash the regexp, not the raw string.
(ede-project-class-files): Note that makefile and automake are not
root only.
(ede-auto-detect-in-dir): New (for use with `ede/detect.el').
(ede-project-dirmatch-p): Deleted.
(ede-project-root-directory): Remove body, return nil.
(ede-project-autoload): :proj-root-dirmatch can be null & doc fix.
(ede-auto-detect-in-dir): If there is no :proj-file, check for a
dirmatch.
* ede/generic.el (ede/config): Replace require of ede.
(ede-generic-new-autoloader): Generic projects are now safe by
default. Note this is NOT a root only project.
(project-rescan, ede-project-root, ede-generic-target-java)
(ede-java-classpath, ede-find-subproject-for-directory): New.
(ede-enable-generic-projects): Add new autoloaders for git, bzr,
hg, sv, CVS.
(ede-generic-vc-project)
(ede-generic-vc-project::ede-generic-setup-configuration): New.
(ede-generic-config): Remove slots: c-include-path,
c-preprocessor-table, c-preprocessor-files, classpath,
build-command, debug-command, run command. Inherit from
ede-extra-config-build, ede-extra-config-program. Make
run-command :value match :custom so only strings are accepted.
Add some more :group slot specifiers.
(ede-generic-project): Add mixins `ede-project-with-config-c' and
`ede-project-with-config-java'. Inherit from
`ede-project-with-config-build',
`ede-project-with-config-program'. Subclass
`ede-project-with-config'. Remove duplication from new baseclass.
(ede-generic-target): Inherit from `ede-target-with-config-build',
`ede-target-with-config-program'. Subclass `ede-target-with-config'.
(ede-generic-target-c-cpp): Add mixin `ede-target-with-config-c'.
(ede-generic-target-java): Add mixin `ede-target-with-config-java'.
(ede-preprocessor-map, ede-system-include-path)
(edejava-classpath): Deleted, moved to config.el.
(project-compile-project, project-compile-target)
(project-debug-target, project-run-target): Deleted.
(ede-generic-get-configuration, ede-generic-setup-configuration)
(ede-commit-project, project-rescan)
(ede-generic-project::ede-customize)
(ede-generic-target::ede-customize)
(ede-generic-config::eieio-done-customizing)
(ede-generic-config::ede-commit): Deleted. Subsumed by new
baseclass.
(ede-preprocessor-map, ede-system-include-path)
(project-debug-target, project-run-target): Call new
`ede-config-get-configuration' instead of old version.
(ede-generic-load): Do not add to global list here.
* ede/files.el (ede-find-project-root)
(ede-files-find-existing)
(ede-directory-get-toplevel-open-project-new): Deleted.
(ede-project-root-directory): Use `ede-project-root' first.
(ede-project-directory-remove-hash)
(ede--directory-project-from-hash)
(ede--directory-project-add-description-to-hash): Rename to make
internal symbols (via --). Expand input dir first.
(ede-directory-project-p): Doc fix (note obsoleted.)
(ede-toplevel-project-or-nil): Alias to `ede-toplevel-project'.
(ede-toplevel-project): Doc Fix. Delete commented out old code.
Simplify returning result from ede-detect-directory-for-project.
(ede-directory-get-open-project): Support when
inodes are disabled. If disabled to str compare on root project.
(ede-directory-get-toplevel-open-project): Enabled nested
projects. When doing directory name matching, save the 'short'
version of an answer (non-exact match) and eventually select the
shortest answer at the end. Expand the filename of tested
projects. Better support for when inodes are disabled. Add
'exact' option so that it will return a project that is an exact
match.
(ede-find-subproject-for-directory): Small optimization to run
`file-truename' less often.
(ede-directory-project-p): Move content, then use
`ede-directory-project-cons'. Use
`ede-detect-directory-for-project', replacing old detection loop.
(ede-directory-project-cons): New, from above.
(ede-toplevel-project): Toss old scanning code. Use
`ede-detect-directory-for-project' instead.
(ede-directory-get-toplevel-open-project-new): New.
* ede/linux.el (ede-linux-project-root): Deleted.
(ede-project-autoload): Remove dirmatch entry - it is no longer
needed.
* lisp/cedet/ede/proj.el (project-rescan): Replace direct
manipulation of `ede-projects' with equivalent and better
functions.
(ede-proj-load): Replace call to test if dir has project to
explicity ask filesystem if Project.ede is there.
* ede/config.el:
* ede/detect.el: New files.
* ede/project-am.el (project-run-target): Add "./" to program to
run for systems where '.' isn't in PATH.
(project-am-load): Remove old code regarding `ede-constructing'.
Just read in the makefiles.
* ede/linux.el (ede-linux-load): Do not add to global list here.
Don't check for existing anymore.
(project-rescan): New.
(ede-linux-project-list, ede-linux-file-existing): Deleted.
(ede-linux-project-root): Delete body. Need symbol for autoloads
for now.
(ede-linux-project): No longer instance tracker.
(ede-project-autoload): Don't provide :proj-root
* ede/emacs.el (ede-emacs-load): Do not add project to global list
here. Don't look for existing first.
(ede-project-autoload): Remove dirmatch entry - it is no longer
needed. Don't provide proj-root anymore.
(ede-emacs-project-list, ede-emacs-file-existing): Delete.
(ede-emacs-project-root): Remove body (need symbol for loaddefs
still).
(ede-emacs-project): Do not instance track anymore.
* ede/cpp-root.el (initialize-instance): Remove commented code.
Add note about why we are adding the project to the master list.
Make sure if we are replacing a prev version, remove from global
list.
(ede-cpp-root-file-existing)
(ede-cpp-root-project-file-for-dir)
(ede-cpp-root-count, ede-cpp-root-project-root, ede-cpp-root-load)
(ede-project-autoload cpp-root): Deleted.
(ede-project-root-directory): Return :directory instead of
calculating from :file.
(project-rescan): New.
* ede/base.el (ede-toplevel): Only use buffer cached value if
subproj not passed in.
* srecode/java.el (srecode-semantic-handle-:java): Fix case when
an EDE project didn't support java paths.
* lisp/cedet/ede/proj-elisp.el
(ede-proj-target-elisp::ede-proj-tweak-autoconf): Kill buffer
after saving modified elisp-comp script, as to avoid "file has
changed on disk; really edit the buffer" questions when script
gets rewritten.
* emacs-lisp/eieio-custom.el (eieio-customize-object): Set
eieio-cog (current group) to g, which is an improved form of input
group.
* srecode/doc-cpp.srt (mode): Set to c mode so this works with
both C and C++.
2014-11-10 01:04:30 +01:00
|
|
|
:typevar (car $6)
|
2011-07-29 22:06:43 -04:00
|
|
|
)
|
|
|
|
;
|
|
|
|
|
|
|
|
template-definition
|
|
|
|
: type
|
|
|
|
( ,$1 )
|
|
|
|
| var-or-fun
|
|
|
|
( ,$1 )
|
|
|
|
;
|
|
|
|
|
|
|
|
opt-stars
|
|
|
|
: STAR opt-starmod opt-stars
|
|
|
|
( (1+ (car $3)) )
|
|
|
|
| ;;EMPTY
|
|
|
|
( 0 )
|
|
|
|
;
|
|
|
|
|
|
|
|
opt-starmod
|
|
|
|
: STARMOD opt-starmod
|
|
|
|
( ,(cons (,car ,$1) $2) )
|
|
|
|
| ;;EMPTY
|
|
|
|
()
|
|
|
|
;
|
|
|
|
|
|
|
|
STARMOD
|
|
|
|
: CONST
|
|
|
|
;
|
|
|
|
|
|
|
|
declmods
|
|
|
|
: DECLMOD declmods
|
|
|
|
( ,(cons ,(car ,$1) $2 ) )
|
|
|
|
| DECLMOD
|
|
|
|
( ,$1 )
|
|
|
|
| ;;EMPTY
|
|
|
|
()
|
|
|
|
;
|
|
|
|
|
|
|
|
DECLMOD
|
|
|
|
: EXTERN
|
|
|
|
| STATIC
|
|
|
|
| CVDECLMOD
|
|
|
|
;; Klaus Berndl: IMHO signed and unsigned are not decl-modes but
|
|
|
|
;; these are only valid for some buildin-types like short, int
|
|
|
|
;; etc... whereas "real" declmods are valid for all types, buildin
|
|
|
|
;; and user-defined! SIGNED UNSIGNED
|
|
|
|
| INLINE
|
|
|
|
| REGISTER
|
|
|
|
| FRIEND
|
|
|
|
;; Klaus Berndl: There can be a few cases where TYPENAME is not
|
|
|
|
;; allowed in C++-syntax but better than not recognizing the allowed
|
|
|
|
;; situations.
|
|
|
|
| TYPENAME
|
|
|
|
| METADECLMOD
|
|
|
|
;; This is a hack in case we are in a class.
|
|
|
|
| VIRTUAL
|
|
|
|
;
|
|
|
|
|
|
|
|
metadeclmod
|
|
|
|
: METADECLMOD
|
|
|
|
()
|
|
|
|
| ;;EMPTY
|
|
|
|
()
|
|
|
|
;
|
|
|
|
|
|
|
|
CVDECLMOD
|
|
|
|
: CONST
|
|
|
|
| VOLATILE
|
|
|
|
;
|
|
|
|
|
|
|
|
cv-declmods
|
|
|
|
: CVDECLMOD cv-declmods
|
|
|
|
( ,(cons ,(car ,$1) $2 ) )
|
|
|
|
| CVDECLMOD
|
|
|
|
( ,$1 )
|
|
|
|
| ;;EMPTY
|
|
|
|
()
|
|
|
|
;
|
|
|
|
|
|
|
|
METADECLMOD
|
|
|
|
: VIRTUAL
|
|
|
|
| MUTABLE
|
|
|
|
;
|
|
|
|
|
|
|
|
;; C++: A type can be modified into a reference by "&"
|
|
|
|
opt-ref
|
|
|
|
: AMPERSAND
|
|
|
|
( 1 )
|
|
|
|
| ;;EMPTY
|
|
|
|
( 0 )
|
|
|
|
;
|
|
|
|
|
|
|
|
typeformbase
|
|
|
|
: typesimple
|
|
|
|
( ,$1 )
|
|
|
|
| STRUCT symbol
|
|
|
|
(TYPE-TAG $2 $1 nil nil )
|
|
|
|
| UNION symbol
|
|
|
|
(TYPE-TAG $2 $1 nil nil )
|
|
|
|
| ENUM symbol
|
|
|
|
(TYPE-TAG $2 $1 nil nil )
|
|
|
|
| builtintype
|
|
|
|
( ,$1 )
|
|
|
|
| symbol template-specifier
|
|
|
|
(TYPE-TAG $1 "class" nil nil :template-specifier $2)
|
|
|
|
;;| namespace-symbol opt-stars opt-template-specifier
|
|
|
|
;;| namespace-symbol opt-template-specifier
|
|
|
|
| namespace-symbol-for-typeformbase opt-template-specifier
|
|
|
|
(TYPE-TAG (car $1) "class" nil nil
|
|
|
|
:template-specifier $2)
|
|
|
|
| symbol
|
|
|
|
( $1 )
|
|
|
|
;
|
|
|
|
|
|
|
|
signedmod
|
|
|
|
: UNSIGNED
|
|
|
|
| SIGNED
|
|
|
|
;
|
|
|
|
|
|
|
|
;; Klaus Berndl: builtintype-types was builtintype
|
|
|
|
builtintype-types
|
|
|
|
: VOID
|
|
|
|
| CHAR
|
|
|
|
;; Klaus Berndl: Added WCHAR
|
|
|
|
| WCHAR
|
|
|
|
| SHORT INT
|
|
|
|
( (concat $1 " " $2) )
|
|
|
|
| SHORT
|
|
|
|
| INT
|
|
|
|
| LONG INT
|
|
|
|
( (concat $1 " " $2) )
|
|
|
|
| FLOAT
|
|
|
|
| DOUBLE
|
|
|
|
| BOOL
|
|
|
|
| LONG DOUBLE
|
|
|
|
( (concat $1 " " $2) )
|
|
|
|
;; TODO: Klaus Berndl: Is there a long long, i think so?!
|
|
|
|
| LONG LONG
|
|
|
|
( (concat $1 " " $2) )
|
|
|
|
| LONG
|
|
|
|
;
|
|
|
|
|
|
|
|
builtintype
|
|
|
|
: signedmod builtintype-types
|
|
|
|
( (concat (car $1) " " (car $2)) )
|
|
|
|
| builtintype-types
|
|
|
|
( ,$1 )
|
|
|
|
;; Klaus Berndl: unsigned is synonym for unsigned int and signed for
|
|
|
|
;; signed int. To make this confusing stuff clear we add here the
|
|
|
|
;; int.
|
|
|
|
| signedmod
|
|
|
|
( (concat (car $1) " int") )
|
|
|
|
;
|
|
|
|
|
|
|
|
;; Klaus Berndl: This parses also nonsense like "const volatile int
|
|
|
|
;; const volatile const const volatile a ..." but IMHO nobody writes
|
2011-11-13 22:27:12 -08:00
|
|
|
;; such code. Normally we should define a rule like typeformbase-mode
|
2011-07-29 22:06:43 -04:00
|
|
|
;; which exactly defines the different allowed cases and combinations
|
|
|
|
;; of declmods (minus the CVDECLMOD) typeformbase and cv-declmods so
|
|
|
|
;; we could recognize more invalid code but IMHO this is not worth the
|
|
|
|
;; effort...
|
|
|
|
codeblock-var-or-fun
|
|
|
|
: declmods typeformbase declmods
|
|
|
|
opt-ref var-or-func-decl
|
|
|
|
( ,(semantic-c-reconstitute-token ,$5 $1 $2 ) )
|
|
|
|
;
|
|
|
|
|
|
|
|
var-or-fun
|
|
|
|
: codeblock-var-or-fun
|
|
|
|
( ,$1 )
|
|
|
|
;; it is possible for a function to not have a type, and
|
|
|
|
;; it is then assumed to be an int. How annoying.
|
|
|
|
;; In C++, this could be a constructor or a destructor.
|
|
|
|
;; Even more annoying. Only ever do this for regular
|
|
|
|
;; top-level items. Ignore this problem in code blocks
|
|
|
|
;; so that we don't have to deal with regular code
|
|
|
|
;; being erroneously converted into types.
|
|
|
|
| declmods var-or-func-decl
|
|
|
|
( ,(semantic-c-reconstitute-token ,$2 $1 nil ) )
|
|
|
|
;
|
|
|
|
|
|
|
|
var-or-func-decl
|
|
|
|
: func-decl
|
|
|
|
( ,$1 )
|
|
|
|
| var-decl
|
|
|
|
( ,$1 )
|
|
|
|
;
|
|
|
|
|
|
|
|
func-decl
|
|
|
|
: opt-stars opt-class opt-destructor functionname
|
|
|
|
opt-template-specifier
|
|
|
|
opt-under-p
|
|
|
|
arg-list
|
|
|
|
opt-post-fcn-modifiers
|
|
|
|
opt-throw
|
|
|
|
opt-initializers
|
|
|
|
fun-or-proto-end
|
|
|
|
( ,$4 'function
|
|
|
|
;; Extra stuff goes in here.
|
|
|
|
;; Continue with the stuff we found in
|
|
|
|
;; this definition
|
|
|
|
$2 $3 $7 $9 $8 ,$1 ,$11 $5 ,$10)
|
|
|
|
| opt-stars opt-class opt-destructor functionname
|
|
|
|
opt-template-specifier
|
|
|
|
opt-under-p
|
|
|
|
;; arg-list - - ini this case, a try implies a fcn.
|
|
|
|
opt-post-fcn-modifiers
|
|
|
|
opt-throw
|
|
|
|
opt-initializers
|
|
|
|
fun-try-end
|
|
|
|
( ,$4 'function
|
|
|
|
;; Extra stuff goes in here.
|
|
|
|
;; Continue with the stuff we found in
|
|
|
|
;; this definition
|
|
|
|
$2 $3 nil $8 $7 ,$1 ,$10 $5 ,$9)
|
|
|
|
;
|
|
|
|
|
|
|
|
var-decl
|
|
|
|
: varnamelist SEMICOLON
|
|
|
|
( $1 'variable )
|
|
|
|
;
|
|
|
|
|
|
|
|
opt-under-p
|
|
|
|
: UNDERP
|
|
|
|
( nil )
|
|
|
|
| UNDERUNDERP
|
|
|
|
( nil )
|
|
|
|
| ;;EMPTY
|
|
|
|
;
|
|
|
|
|
|
|
|
;; Klaus Berndl: symbol -> namespace-symbol
|
|
|
|
opt-initializers
|
|
|
|
: COLON namespace-symbol semantic-list opt-initializers
|
|
|
|
| COMA namespace-symbol semantic-list opt-initializers
|
|
|
|
| ;;EMPTY
|
|
|
|
;
|
|
|
|
|
|
|
|
opt-post-fcn-modifiers
|
|
|
|
: post-fcn-modifiers opt-post-fcn-modifiers
|
Update from CEDET trunk.
* grammars/c.by (template-type): Add :template-specifier and
:typevar to capture extra details about the template.
(opt-post-fcn-modifiers): Splice in the found symbol into the
return value correctly.
(QUESTION): New punctuation.
(expression): Add ternary conditional support.
* grammars/scheme.by (MODULE): New token.
(scheme): Handle expanding the MODULE tag.
(scheme-list): Remove closeparen required match.
(scheme-in-list): Remove extraneous matches for DEFINE. Add
support for MODULE Simplify matching for code & make work.
(name-args, name-arg-list, name-arg-expand): Make it work.
* semantic.el (semantic-mode): Add/remove 3
completion-at-point-functions.
(semantic-completion-at-point-function): Removed.
(semantic-analyze-completion-at-point-function)
(semantic-analyze-notc-completion-at-point-function)
(semantic-analyze-nolongprefix-completion-at-point-function): New
completion at point functions.
* semantic/doc.el (semantic-doc-snarf-comment-for-tag): Fix case
when comment-end is empty string.
* semantic/debug.el
(semantic-debug-parser-debugger-source): New buffer local
variable.
(semantic-debug-interface): Add 'nil' initform to overlays.
(semantic-debug-mode): Remove read-only tags from buffers on exit.
(semantic-debug): Add autoload cookie. Force the language
specific debugger to load.
* semantic/db.el (generic::semanticdb-full-filename): New generic
method to allow this method to be used on buffer names via an
associated database.
* semantic/symref.el
(semantic-symref-cleanup-recent-buffers-fcn): When cleaning up
buffers, don't clean up buffers that are being used (i.e., in a
window) when the hook fires.
(semantic-symref-recently-opened-buffers): New tracking variable.
(semantic-symref-cleanup-recent-buffers-fcn): New hook fcn.
(semantic-symref-result-get-tags): Move logic into
`semantic-symref-hit-to-tag-via-buffer', and cleanup buffers via
the symref cleanup function in post-command-hook.
(semantic-symref-hit-to-tag-via-buffer): Logic that used to be
from above.
(semantic-symref-hit-to-tag-via-db): New.
* semantic/analyze.el:
(semantic-analyze-find-tag-sequence-default): If first entry in
sequence is the only one, apply tagclass filter.
(semantic-analyze-princ-sequence): Show slot even if empty.
(semantic-analyze-find-tag-sequence)
(semantic-analyze-find-tag-sequence-default): Add flags argument.
Add support for forcing the final entry of the sequence to be of
class variable.
(semantic-analyze-find-tag): Fix bug where input class filter was
ignored if there was a typecache match.
(semantic-analyze-current-context-default): For assignments, the
assignee now must be of class variable.
* semantic/analyze/complete.el
(semantic-analyze-possible-completions-default): Add
'no-longprefix' flag. When used, the prefix and prefixtypes are
shortened to just the last symbol.
* semantic/bovine/c.el (semantic-c-do-lex-if): Catch errors from
'hideif', and push to the parser warning stack.
(semantic-lex-cpp-define): When a comment is at the end of a
macro, do not subtract an extra 1 from the found position. Fixes
bug with: #define foo (a)/**/ adding an extra ')' to the stream.
* semantic/bovine/scm.el (semantic-lex-scheme-symbol): Allow
symbols to be one char long.
* semantic/bovine/grammar.el
(bovine-grammar-calculate-source-on-path): New.
(bovine-grammar-setupcode-builder): Use it.
* ede.el (ede/detect): New require.
(ede-version): Bump version
(ede-initialize-state-current-buffer): Use new
`ede-detect-directory-for-project' to detect projects first
instead of depending on currente dir only.
(ede-delete-project-from-global-list): New.
(ede-flush-deleted-projects): Use above.
(ede-check-project-query-fcn): New variable
(ede-check-project-directory): Use above when querying the user.
Added to support unit testing of this security measure.
(ede-initialize-state-current-buffer): Use
`ede-directory-project-cons' instead of the -detect- fcn to take
advantage of the cache. Pass found project into
`ede-load-project-file'.
(ede-load-project-file): Add new input DETECTIN.
(ede-rescan-toplevel): Get the proj root a better way.
(ede-load-project-file): Return the loaded object. When asking
for existing project, ask for an exact match.
(ede-initialize-state-current-buffer): Simplify some conditional
logic.
(ede-load-project-file): Simplify conditional logic.
(ede-global-list-sanity-check): New Testing fcn.
(ede-parent-project): Replace old code with call to faster
`ede-find-subproject-for-directory'.
(ede-load-project-file): Use
`ede-directory-get-toplevel-open-project' instead of above
deleted. Rename "pfc" to "autoloader". Use
`ede-directory-project-cons' to detect a project. Delete no
project found case where we search up the tree.
* ede/auto.el (ede-project-autoload): Fix doc typo. Add
`:root-only' slot.
(ede-auto-load-project): Doc update: warn to not use.
(ede-dir-to-projectfile): Deleted.
(ede-project-autoload-dirmatch): Add subdir-only slot. Make
configdatastash unbound by default.
(ede-do-dirmatch): If subdir-only is true, then don't allow exact
matches. Account for configdatastash as unbound. Assume value of
nil means no tool installed. Make sure loaded path matches from
beginning. Stash the regexp, not the raw string.
(ede-project-class-files): Note that makefile and automake are not
root only.
(ede-auto-detect-in-dir): New (for use with `ede/detect.el').
(ede-project-dirmatch-p): Deleted.
(ede-project-root-directory): Remove body, return nil.
(ede-project-autoload): :proj-root-dirmatch can be null & doc fix.
(ede-auto-detect-in-dir): If there is no :proj-file, check for a
dirmatch.
* ede/generic.el (ede/config): Replace require of ede.
(ede-generic-new-autoloader): Generic projects are now safe by
default. Note this is NOT a root only project.
(project-rescan, ede-project-root, ede-generic-target-java)
(ede-java-classpath, ede-find-subproject-for-directory): New.
(ede-enable-generic-projects): Add new autoloaders for git, bzr,
hg, sv, CVS.
(ede-generic-vc-project)
(ede-generic-vc-project::ede-generic-setup-configuration): New.
(ede-generic-config): Remove slots: c-include-path,
c-preprocessor-table, c-preprocessor-files, classpath,
build-command, debug-command, run command. Inherit from
ede-extra-config-build, ede-extra-config-program. Make
run-command :value match :custom so only strings are accepted.
Add some more :group slot specifiers.
(ede-generic-project): Add mixins `ede-project-with-config-c' and
`ede-project-with-config-java'. Inherit from
`ede-project-with-config-build',
`ede-project-with-config-program'. Subclass
`ede-project-with-config'. Remove duplication from new baseclass.
(ede-generic-target): Inherit from `ede-target-with-config-build',
`ede-target-with-config-program'. Subclass `ede-target-with-config'.
(ede-generic-target-c-cpp): Add mixin `ede-target-with-config-c'.
(ede-generic-target-java): Add mixin `ede-target-with-config-java'.
(ede-preprocessor-map, ede-system-include-path)
(edejava-classpath): Deleted, moved to config.el.
(project-compile-project, project-compile-target)
(project-debug-target, project-run-target): Deleted.
(ede-generic-get-configuration, ede-generic-setup-configuration)
(ede-commit-project, project-rescan)
(ede-generic-project::ede-customize)
(ede-generic-target::ede-customize)
(ede-generic-config::eieio-done-customizing)
(ede-generic-config::ede-commit): Deleted. Subsumed by new
baseclass.
(ede-preprocessor-map, ede-system-include-path)
(project-debug-target, project-run-target): Call new
`ede-config-get-configuration' instead of old version.
(ede-generic-load): Do not add to global list here.
* ede/files.el (ede-find-project-root)
(ede-files-find-existing)
(ede-directory-get-toplevel-open-project-new): Deleted.
(ede-project-root-directory): Use `ede-project-root' first.
(ede-project-directory-remove-hash)
(ede--directory-project-from-hash)
(ede--directory-project-add-description-to-hash): Rename to make
internal symbols (via --). Expand input dir first.
(ede-directory-project-p): Doc fix (note obsoleted.)
(ede-toplevel-project-or-nil): Alias to `ede-toplevel-project'.
(ede-toplevel-project): Doc Fix. Delete commented out old code.
Simplify returning result from ede-detect-directory-for-project.
(ede-directory-get-open-project): Support when
inodes are disabled. If disabled to str compare on root project.
(ede-directory-get-toplevel-open-project): Enabled nested
projects. When doing directory name matching, save the 'short'
version of an answer (non-exact match) and eventually select the
shortest answer at the end. Expand the filename of tested
projects. Better support for when inodes are disabled. Add
'exact' option so that it will return a project that is an exact
match.
(ede-find-subproject-for-directory): Small optimization to run
`file-truename' less often.
(ede-directory-project-p): Move content, then use
`ede-directory-project-cons'. Use
`ede-detect-directory-for-project', replacing old detection loop.
(ede-directory-project-cons): New, from above.
(ede-toplevel-project): Toss old scanning code. Use
`ede-detect-directory-for-project' instead.
(ede-directory-get-toplevel-open-project-new): New.
* ede/linux.el (ede-linux-project-root): Deleted.
(ede-project-autoload): Remove dirmatch entry - it is no longer
needed.
* lisp/cedet/ede/proj.el (project-rescan): Replace direct
manipulation of `ede-projects' with equivalent and better
functions.
(ede-proj-load): Replace call to test if dir has project to
explicity ask filesystem if Project.ede is there.
* ede/config.el:
* ede/detect.el: New files.
* ede/project-am.el (project-run-target): Add "./" to program to
run for systems where '.' isn't in PATH.
(project-am-load): Remove old code regarding `ede-constructing'.
Just read in the makefiles.
* ede/linux.el (ede-linux-load): Do not add to global list here.
Don't check for existing anymore.
(project-rescan): New.
(ede-linux-project-list, ede-linux-file-existing): Deleted.
(ede-linux-project-root): Delete body. Need symbol for autoloads
for now.
(ede-linux-project): No longer instance tracker.
(ede-project-autoload): Don't provide :proj-root
* ede/emacs.el (ede-emacs-load): Do not add project to global list
here. Don't look for existing first.
(ede-project-autoload): Remove dirmatch entry - it is no longer
needed. Don't provide proj-root anymore.
(ede-emacs-project-list, ede-emacs-file-existing): Delete.
(ede-emacs-project-root): Remove body (need symbol for loaddefs
still).
(ede-emacs-project): Do not instance track anymore.
* ede/cpp-root.el (initialize-instance): Remove commented code.
Add note about why we are adding the project to the master list.
Make sure if we are replacing a prev version, remove from global
list.
(ede-cpp-root-file-existing)
(ede-cpp-root-project-file-for-dir)
(ede-cpp-root-count, ede-cpp-root-project-root, ede-cpp-root-load)
(ede-project-autoload cpp-root): Deleted.
(ede-project-root-directory): Return :directory instead of
calculating from :file.
(project-rescan): New.
* ede/base.el (ede-toplevel): Only use buffer cached value if
subproj not passed in.
* srecode/java.el (srecode-semantic-handle-:java): Fix case when
an EDE project didn't support java paths.
* lisp/cedet/ede/proj-elisp.el
(ede-proj-target-elisp::ede-proj-tweak-autoconf): Kill buffer
after saving modified elisp-comp script, as to avoid "file has
changed on disk; really edit the buffer" questions when script
gets rewritten.
* emacs-lisp/eieio-custom.el (eieio-customize-object): Set
eieio-cog (current group) to g, which is an improved form of input
group.
* srecode/doc-cpp.srt (mode): Set to c mode so this works with
both C and C++.
2014-11-10 01:04:30 +01:00
|
|
|
( ,(cons ,(car $1) $2) )
|
2011-07-29 22:06:43 -04:00
|
|
|
| ;;EMPTY
|
|
|
|
( nil )
|
|
|
|
;
|
|
|
|
|
|
|
|
post-fcn-modifiers
|
|
|
|
: REENTRANT
|
|
|
|
| CONST
|
|
|
|
;
|
|
|
|
|
|
|
|
opt-throw
|
|
|
|
: THROW semantic-list
|
|
|
|
( EXPAND $2 throw-exception-list )
|
|
|
|
| ;;EMPTY
|
|
|
|
;
|
|
|
|
|
|
|
|
;; Is this true? I don't actually know.
|
|
|
|
throw-exception-list
|
|
|
|
: namespace-symbol COMA throw-exception-list
|
|
|
|
( ,(cons (car $1) $3) )
|
|
|
|
| namespace-symbol RPAREN
|
|
|
|
( ,$1 )
|
|
|
|
| symbol RPAREN
|
|
|
|
( $1 )
|
|
|
|
| LPAREN throw-exception-list
|
|
|
|
( ,$2 )
|
|
|
|
| RPAREN
|
|
|
|
( )
|
|
|
|
;
|
|
|
|
|
|
|
|
opt-bits
|
|
|
|
: COLON number
|
|
|
|
( $2 )
|
|
|
|
| ;;EMPTY
|
|
|
|
( nil )
|
|
|
|
;
|
|
|
|
|
|
|
|
opt-array
|
|
|
|
: BRACK_BLCK opt-array
|
|
|
|
;; Eventually we want to replace the 1 below with a size
|
|
|
|
;; (if available)
|
|
|
|
( (cons 1 (car ,$2) ) )
|
|
|
|
| ;;EMPTY
|
|
|
|
( nil )
|
|
|
|
;
|
|
|
|
|
|
|
|
opt-assign
|
|
|
|
: EQUAL expression
|
|
|
|
( $2 )
|
|
|
|
| ;;EMPTY
|
|
|
|
( nil )
|
|
|
|
;
|
|
|
|
|
|
|
|
opt-restrict
|
|
|
|
: RESTRICT
|
|
|
|
| ;;EMPTY
|
|
|
|
;
|
|
|
|
|
|
|
|
;; Klaus Berndl: symbol -> namespace-symbol?! I think so. Can be that
|
|
|
|
;; then also some invalid C++-syntax is parsed but this is better than
|
|
|
|
;; not parsing valid syntax.
|
|
|
|
varname
|
|
|
|
: opt-stars opt-restrict namespace-symbol opt-bits opt-array
|
|
|
|
( ,$3 ,$1 ,$4 ,$5 )
|
|
|
|
;
|
|
|
|
|
|
|
|
;; I should store more in this def, but leave it simple for now.
|
|
|
|
;; Klaus Berndl: const and volatile can be written after the type!
|
|
|
|
variablearg
|
Merge with CEDET upstream.
* admin/grammars/c.by (expr-binop): Add MOD.
(variablearg): Add 'opt-assign'.
(variablearg, varnamelist): Add default values so that it can be
later expanded into the tag.
(opt-stuff-after-symbol): Rename to 'brackets-after-symbol' and
remove empty match.
(multi-stage-dereference): Adapt to above rename.
(unaryexpression): Use 'symbol' instead of 'namespace-symbol',
since the latter also leads to an empty match at the end which
would make this too greedy.
(variablearg-opt-name): Support parsing of function pointers
inside an argument list.
* semantic/analyze.el
(semantic-analyze-find-tag-sequence-default): Always add scope to
the local miniscope for each type. Otherwise, structure tags are
not analyzed correctly. Also, always search the extended
miniscope even when not dealing with types.
* semantic/ctxt.el (semantic-get-local-variables-default): Also
try to parse local variables for buffers which are currently
marked as unparseable. Otherwise, it is often impossible to
complete local variables.
* semantic/scope.el (semantic-analyze-scoped-types-default): If we
cannot find a type in the typecache, also look into the the types
we already found. This is necessary since in C++, a 'using
namespace' can be dependend on a previous one.
(semantic-completable-tags-from-type): When creating the list of
completable types, pull in types which are referenced through
'using' statements, and also preserve their filenames.
* semanitc/bovine/c.el (semantic/analyze/refs): Require.
(semantic-analyze-tag-references): New override. Mainly copied
from the default implementation, but if nothing could be found (or
just the tag itself), drop all namespaces from the scope and
search again. This is necessary for implementations which are
defined outside of the namespace and only pull those in through
'using' statements.
(semantic-ctxt-scoped-types): Go through all tags around point and
search them for using statements. In the case for using
statements outside of function scope, append them in the correct
order instead of using 'cons'. This is important since using
statements may depend on previous ones.
(semantic-expand-c-tag-namelist): Do not try to parse struct
definitions as default values. The grammar parser seems to return
the point positions slightly differently (as a cons instead of a
list). Also, set parent for typedefs to 'nil'. It does not
really make sense to set a parent class for typedefs, and it can
also lead to endless loops when calculating scope.
(semantic-c-reconstitute-token): Change handling of function
pointers; instead of seeing them as variables, handle them as
functions with a 'function-pointer' attribute. Also, correctly
deal with function pointers as function arguments.
(semantic-c-reconstitute-function-arglist): New function to parse
function pointers inside an argument list.
(semantic-format-tag-name): Use 'function-pointer' attribute
instead of the old 'functionpointer-flag'.
(semantic-cpp-lexer): Use new `semantic-lex-spp-paren-or-list'.
* semantic/bovine/gcc.el (semantic-gcc-setup): Add 'features.h' to
the list of files whose preprocessor symbols are included. This
pulls in things like __USE_POSIX and similar.
* semantic/format.el (semantic-format-tag-prototype-default):
Display default values if available.
* semantic/analyze/refs.el (semantic-analyze-refs-impl)
(semantic-analyze-refs-proto): Add 'default-value' as ignorable in
call to `semantic-tag-similar-p'.
* semantic/db-mode.el (semanticdb-semantic-init-hook-fcn): Always
set buffer for `semanticdb-current-table'.
* semantic/db.el (semanticdb-table::semanticdb-refresh-table): The
previous change turned up a bug in this method. Since the current
table now correctly has a buffer set, the first clause in the
`cond' would be taken, but there was a `save-excursion' missing.
* semantic/lex-spp.el (semantic-c-end-of-macro): Declare.
(semantic-lex-spp-token-macro-to-macro-stream): Deal with macros
which open/close a scope. For this, leave an overlay if we
encounter a single open paren and return a semantic-list in the
lexer. When this list gets expanded, retrieve the old position
from the overlay. See the comments in the function for further
details.
(semantic-lex-spp-find-closing-macro): New function to find the
next macro which closes scope (i.e., has a closing paren).
(semantic-lex-spp-replace-or-symbol-or-keyword): Go to end of
closing macro if necessary.
(semantic-lex-spp-paren-or-list): New lexer to specially deal with
parens in macro definitions.
* semantic/decorate/mode.el (semantic-decoration-mode): Do not
decorate available tags immediately but in an idle timer, since
EDE will usually not be activated yet, which will make it
impossible to find project includes.
* semantic/decorate/include.el
(semantic-decoration-on-includes-highlight-default): Remove
'unloaded' from throttle when decorating includes, otherwise all
would be loaded. Rename 'table' to 'currenttable' to make things
clearer.
* ede/linux.el (cl): Require during compile.
* ede/linux.el (project-linux-build-directory-default)
(project-linux-architecture-default): Add customizable variables.
(ede-linux-project): Add additional slots to track Linux-specific
information (out-of-tree build directory and selected
architecture).
(ede-linux--get-build-directory, ede-linux--get-archs)
(ede-linux--detect-architecture, ede-linux--get-architecture)
(ede-linux--include-path): Added function to detect Linux-specific
information.
(ede-linux-load): Set new Linux-specific information when creating
a project.
(ede-expand-filename-impl): Use new and more accurate include
information.
* semantic/scope.el (semantic-calculate-scope): Return a clone of
the scopecache, so that everyone is working with its own (shallow)
copy. Otherwise, if one caller is resetting the scope, it would
be reset for all others working with the scope cache as well.
2013-12-12 22:33:06 +01:00
|
|
|
: declmods typeformbase cv-declmods opt-ref variablearg-opt-name opt-assign
|
|
|
|
( VARIABLE-TAG (list (append $5 ,$6)) $2 nil
|
2011-07-29 22:06:43 -04:00
|
|
|
:constant-flag (if (member "const" (append $1 $3)) t nil)
|
|
|
|
:typemodifiers (delete "const" (append $1 $3))
|
|
|
|
:reference (car ,$4)
|
|
|
|
)
|
|
|
|
;
|
|
|
|
|
|
|
|
variablearg-opt-name
|
|
|
|
: varname
|
|
|
|
( ,$1 )
|
Merge with CEDET upstream.
* admin/grammars/c.by (expr-binop): Add MOD.
(variablearg): Add 'opt-assign'.
(variablearg, varnamelist): Add default values so that it can be
later expanded into the tag.
(opt-stuff-after-symbol): Rename to 'brackets-after-symbol' and
remove empty match.
(multi-stage-dereference): Adapt to above rename.
(unaryexpression): Use 'symbol' instead of 'namespace-symbol',
since the latter also leads to an empty match at the end which
would make this too greedy.
(variablearg-opt-name): Support parsing of function pointers
inside an argument list.
* semantic/analyze.el
(semantic-analyze-find-tag-sequence-default): Always add scope to
the local miniscope for each type. Otherwise, structure tags are
not analyzed correctly. Also, always search the extended
miniscope even when not dealing with types.
* semantic/ctxt.el (semantic-get-local-variables-default): Also
try to parse local variables for buffers which are currently
marked as unparseable. Otherwise, it is often impossible to
complete local variables.
* semantic/scope.el (semantic-analyze-scoped-types-default): If we
cannot find a type in the typecache, also look into the the types
we already found. This is necessary since in C++, a 'using
namespace' can be dependend on a previous one.
(semantic-completable-tags-from-type): When creating the list of
completable types, pull in types which are referenced through
'using' statements, and also preserve their filenames.
* semanitc/bovine/c.el (semantic/analyze/refs): Require.
(semantic-analyze-tag-references): New override. Mainly copied
from the default implementation, but if nothing could be found (or
just the tag itself), drop all namespaces from the scope and
search again. This is necessary for implementations which are
defined outside of the namespace and only pull those in through
'using' statements.
(semantic-ctxt-scoped-types): Go through all tags around point and
search them for using statements. In the case for using
statements outside of function scope, append them in the correct
order instead of using 'cons'. This is important since using
statements may depend on previous ones.
(semantic-expand-c-tag-namelist): Do not try to parse struct
definitions as default values. The grammar parser seems to return
the point positions slightly differently (as a cons instead of a
list). Also, set parent for typedefs to 'nil'. It does not
really make sense to set a parent class for typedefs, and it can
also lead to endless loops when calculating scope.
(semantic-c-reconstitute-token): Change handling of function
pointers; instead of seeing them as variables, handle them as
functions with a 'function-pointer' attribute. Also, correctly
deal with function pointers as function arguments.
(semantic-c-reconstitute-function-arglist): New function to parse
function pointers inside an argument list.
(semantic-format-tag-name): Use 'function-pointer' attribute
instead of the old 'functionpointer-flag'.
(semantic-cpp-lexer): Use new `semantic-lex-spp-paren-or-list'.
* semantic/bovine/gcc.el (semantic-gcc-setup): Add 'features.h' to
the list of files whose preprocessor symbols are included. This
pulls in things like __USE_POSIX and similar.
* semantic/format.el (semantic-format-tag-prototype-default):
Display default values if available.
* semantic/analyze/refs.el (semantic-analyze-refs-impl)
(semantic-analyze-refs-proto): Add 'default-value' as ignorable in
call to `semantic-tag-similar-p'.
* semantic/db-mode.el (semanticdb-semantic-init-hook-fcn): Always
set buffer for `semanticdb-current-table'.
* semantic/db.el (semanticdb-table::semanticdb-refresh-table): The
previous change turned up a bug in this method. Since the current
table now correctly has a buffer set, the first clause in the
`cond' would be taken, but there was a `save-excursion' missing.
* semantic/lex-spp.el (semantic-c-end-of-macro): Declare.
(semantic-lex-spp-token-macro-to-macro-stream): Deal with macros
which open/close a scope. For this, leave an overlay if we
encounter a single open paren and return a semantic-list in the
lexer. When this list gets expanded, retrieve the old position
from the overlay. See the comments in the function for further
details.
(semantic-lex-spp-find-closing-macro): New function to find the
next macro which closes scope (i.e., has a closing paren).
(semantic-lex-spp-replace-or-symbol-or-keyword): Go to end of
closing macro if necessary.
(semantic-lex-spp-paren-or-list): New lexer to specially deal with
parens in macro definitions.
* semantic/decorate/mode.el (semantic-decoration-mode): Do not
decorate available tags immediately but in an idle timer, since
EDE will usually not be activated yet, which will make it
impossible to find project includes.
* semantic/decorate/include.el
(semantic-decoration-on-includes-highlight-default): Remove
'unloaded' from throttle when decorating includes, otherwise all
would be loaded. Rename 'table' to 'currenttable' to make things
clearer.
* ede/linux.el (cl): Require during compile.
* ede/linux.el (project-linux-build-directory-default)
(project-linux-architecture-default): Add customizable variables.
(ede-linux-project): Add additional slots to track Linux-specific
information (out-of-tree build directory and selected
architecture).
(ede-linux--get-build-directory, ede-linux--get-archs)
(ede-linux--detect-architecture, ede-linux--get-architecture)
(ede-linux--include-path): Added function to detect Linux-specific
information.
(ede-linux-load): Set new Linux-specific information when creating
a project.
(ede-expand-filename-impl): Use new and more accurate include
information.
* semantic/scope.el (semantic-calculate-scope): Return a clone of
the scopecache, so that everyone is working with its own (shallow)
copy. Otherwise, if one caller is resetting the scope, it would
be reset for all others working with the scope cache as well.
2013-12-12 22:33:06 +01:00
|
|
|
| semantic-list arg-list
|
|
|
|
( (car ( EXPAND $1 function-pointer )) $2)
|
2018-02-16 17:33:57 -05:00
|
|
|
;; Klaus Berndl: This allows variableargs without an arg-name being
|
|
|
|
;; parsed correctly even if there several pointers (*)
|
2011-07-29 22:06:43 -04:00
|
|
|
| opt-stars
|
|
|
|
( "" ,$1 nil nil nil )
|
|
|
|
;
|
|
|
|
|
|
|
|
varname-opt-initializer
|
|
|
|
: semantic-list
|
|
|
|
| opt-assign
|
|
|
|
| ;; EMPTY
|
|
|
|
;
|
|
|
|
|
|
|
|
varnamelist
|
|
|
|
: opt-ref varname varname-opt-initializer COMA varnamelist
|
Merge with CEDET upstream.
* admin/grammars/c.by (expr-binop): Add MOD.
(variablearg): Add 'opt-assign'.
(variablearg, varnamelist): Add default values so that it can be
later expanded into the tag.
(opt-stuff-after-symbol): Rename to 'brackets-after-symbol' and
remove empty match.
(multi-stage-dereference): Adapt to above rename.
(unaryexpression): Use 'symbol' instead of 'namespace-symbol',
since the latter also leads to an empty match at the end which
would make this too greedy.
(variablearg-opt-name): Support parsing of function pointers
inside an argument list.
* semantic/analyze.el
(semantic-analyze-find-tag-sequence-default): Always add scope to
the local miniscope for each type. Otherwise, structure tags are
not analyzed correctly. Also, always search the extended
miniscope even when not dealing with types.
* semantic/ctxt.el (semantic-get-local-variables-default): Also
try to parse local variables for buffers which are currently
marked as unparseable. Otherwise, it is often impossible to
complete local variables.
* semantic/scope.el (semantic-analyze-scoped-types-default): If we
cannot find a type in the typecache, also look into the the types
we already found. This is necessary since in C++, a 'using
namespace' can be dependend on a previous one.
(semantic-completable-tags-from-type): When creating the list of
completable types, pull in types which are referenced through
'using' statements, and also preserve their filenames.
* semanitc/bovine/c.el (semantic/analyze/refs): Require.
(semantic-analyze-tag-references): New override. Mainly copied
from the default implementation, but if nothing could be found (or
just the tag itself), drop all namespaces from the scope and
search again. This is necessary for implementations which are
defined outside of the namespace and only pull those in through
'using' statements.
(semantic-ctxt-scoped-types): Go through all tags around point and
search them for using statements. In the case for using
statements outside of function scope, append them in the correct
order instead of using 'cons'. This is important since using
statements may depend on previous ones.
(semantic-expand-c-tag-namelist): Do not try to parse struct
definitions as default values. The grammar parser seems to return
the point positions slightly differently (as a cons instead of a
list). Also, set parent for typedefs to 'nil'. It does not
really make sense to set a parent class for typedefs, and it can
also lead to endless loops when calculating scope.
(semantic-c-reconstitute-token): Change handling of function
pointers; instead of seeing them as variables, handle them as
functions with a 'function-pointer' attribute. Also, correctly
deal with function pointers as function arguments.
(semantic-c-reconstitute-function-arglist): New function to parse
function pointers inside an argument list.
(semantic-format-tag-name): Use 'function-pointer' attribute
instead of the old 'functionpointer-flag'.
(semantic-cpp-lexer): Use new `semantic-lex-spp-paren-or-list'.
* semantic/bovine/gcc.el (semantic-gcc-setup): Add 'features.h' to
the list of files whose preprocessor symbols are included. This
pulls in things like __USE_POSIX and similar.
* semantic/format.el (semantic-format-tag-prototype-default):
Display default values if available.
* semantic/analyze/refs.el (semantic-analyze-refs-impl)
(semantic-analyze-refs-proto): Add 'default-value' as ignorable in
call to `semantic-tag-similar-p'.
* semantic/db-mode.el (semanticdb-semantic-init-hook-fcn): Always
set buffer for `semanticdb-current-table'.
* semantic/db.el (semanticdb-table::semanticdb-refresh-table): The
previous change turned up a bug in this method. Since the current
table now correctly has a buffer set, the first clause in the
`cond' would be taken, but there was a `save-excursion' missing.
* semantic/lex-spp.el (semantic-c-end-of-macro): Declare.
(semantic-lex-spp-token-macro-to-macro-stream): Deal with macros
which open/close a scope. For this, leave an overlay if we
encounter a single open paren and return a semantic-list in the
lexer. When this list gets expanded, retrieve the old position
from the overlay. See the comments in the function for further
details.
(semantic-lex-spp-find-closing-macro): New function to find the
next macro which closes scope (i.e., has a closing paren).
(semantic-lex-spp-replace-or-symbol-or-keyword): Go to end of
closing macro if necessary.
(semantic-lex-spp-paren-or-list): New lexer to specially deal with
parens in macro definitions.
* semantic/decorate/mode.el (semantic-decoration-mode): Do not
decorate available tags immediately but in an idle timer, since
EDE will usually not be activated yet, which will make it
impossible to find project includes.
* semantic/decorate/include.el
(semantic-decoration-on-includes-highlight-default): Remove
'unloaded' from throttle when decorating includes, otherwise all
would be loaded. Rename 'table' to 'currenttable' to make things
clearer.
* ede/linux.el (cl): Require during compile.
* ede/linux.el (project-linux-build-directory-default)
(project-linux-architecture-default): Add customizable variables.
(ede-linux-project): Add additional slots to track Linux-specific
information (out-of-tree build directory and selected
architecture).
(ede-linux--get-build-directory, ede-linux--get-archs)
(ede-linux--detect-architecture, ede-linux--get-architecture)
(ede-linux--include-path): Added function to detect Linux-specific
information.
(ede-linux-load): Set new Linux-specific information when creating
a project.
(ede-expand-filename-impl): Use new and more accurate include
information.
* semantic/scope.el (semantic-calculate-scope): Return a clone of
the scopecache, so that everyone is working with its own (shallow)
copy. Otherwise, if one caller is resetting the scope, it would
be reset for all others working with the scope cache as well.
2013-12-12 22:33:06 +01:00
|
|
|
( ,(cons (append $2 $3) $5) )
|
2011-07-29 22:06:43 -04:00
|
|
|
| opt-ref varname varname-opt-initializer
|
Merge with CEDET upstream.
* admin/grammars/c.by (expr-binop): Add MOD.
(variablearg): Add 'opt-assign'.
(variablearg, varnamelist): Add default values so that it can be
later expanded into the tag.
(opt-stuff-after-symbol): Rename to 'brackets-after-symbol' and
remove empty match.
(multi-stage-dereference): Adapt to above rename.
(unaryexpression): Use 'symbol' instead of 'namespace-symbol',
since the latter also leads to an empty match at the end which
would make this too greedy.
(variablearg-opt-name): Support parsing of function pointers
inside an argument list.
* semantic/analyze.el
(semantic-analyze-find-tag-sequence-default): Always add scope to
the local miniscope for each type. Otherwise, structure tags are
not analyzed correctly. Also, always search the extended
miniscope even when not dealing with types.
* semantic/ctxt.el (semantic-get-local-variables-default): Also
try to parse local variables for buffers which are currently
marked as unparseable. Otherwise, it is often impossible to
complete local variables.
* semantic/scope.el (semantic-analyze-scoped-types-default): If we
cannot find a type in the typecache, also look into the the types
we already found. This is necessary since in C++, a 'using
namespace' can be dependend on a previous one.
(semantic-completable-tags-from-type): When creating the list of
completable types, pull in types which are referenced through
'using' statements, and also preserve their filenames.
* semanitc/bovine/c.el (semantic/analyze/refs): Require.
(semantic-analyze-tag-references): New override. Mainly copied
from the default implementation, but if nothing could be found (or
just the tag itself), drop all namespaces from the scope and
search again. This is necessary for implementations which are
defined outside of the namespace and only pull those in through
'using' statements.
(semantic-ctxt-scoped-types): Go through all tags around point and
search them for using statements. In the case for using
statements outside of function scope, append them in the correct
order instead of using 'cons'. This is important since using
statements may depend on previous ones.
(semantic-expand-c-tag-namelist): Do not try to parse struct
definitions as default values. The grammar parser seems to return
the point positions slightly differently (as a cons instead of a
list). Also, set parent for typedefs to 'nil'. It does not
really make sense to set a parent class for typedefs, and it can
also lead to endless loops when calculating scope.
(semantic-c-reconstitute-token): Change handling of function
pointers; instead of seeing them as variables, handle them as
functions with a 'function-pointer' attribute. Also, correctly
deal with function pointers as function arguments.
(semantic-c-reconstitute-function-arglist): New function to parse
function pointers inside an argument list.
(semantic-format-tag-name): Use 'function-pointer' attribute
instead of the old 'functionpointer-flag'.
(semantic-cpp-lexer): Use new `semantic-lex-spp-paren-or-list'.
* semantic/bovine/gcc.el (semantic-gcc-setup): Add 'features.h' to
the list of files whose preprocessor symbols are included. This
pulls in things like __USE_POSIX and similar.
* semantic/format.el (semantic-format-tag-prototype-default):
Display default values if available.
* semantic/analyze/refs.el (semantic-analyze-refs-impl)
(semantic-analyze-refs-proto): Add 'default-value' as ignorable in
call to `semantic-tag-similar-p'.
* semantic/db-mode.el (semanticdb-semantic-init-hook-fcn): Always
set buffer for `semanticdb-current-table'.
* semantic/db.el (semanticdb-table::semanticdb-refresh-table): The
previous change turned up a bug in this method. Since the current
table now correctly has a buffer set, the first clause in the
`cond' would be taken, but there was a `save-excursion' missing.
* semantic/lex-spp.el (semantic-c-end-of-macro): Declare.
(semantic-lex-spp-token-macro-to-macro-stream): Deal with macros
which open/close a scope. For this, leave an overlay if we
encounter a single open paren and return a semantic-list in the
lexer. When this list gets expanded, retrieve the old position
from the overlay. See the comments in the function for further
details.
(semantic-lex-spp-find-closing-macro): New function to find the
next macro which closes scope (i.e., has a closing paren).
(semantic-lex-spp-replace-or-symbol-or-keyword): Go to end of
closing macro if necessary.
(semantic-lex-spp-paren-or-list): New lexer to specially deal with
parens in macro definitions.
* semantic/decorate/mode.el (semantic-decoration-mode): Do not
decorate available tags immediately but in an idle timer, since
EDE will usually not be activated yet, which will make it
impossible to find project includes.
* semantic/decorate/include.el
(semantic-decoration-on-includes-highlight-default): Remove
'unloaded' from throttle when decorating includes, otherwise all
would be loaded. Rename 'table' to 'currenttable' to make things
clearer.
* ede/linux.el (cl): Require during compile.
* ede/linux.el (project-linux-build-directory-default)
(project-linux-architecture-default): Add customizable variables.
(ede-linux-project): Add additional slots to track Linux-specific
information (out-of-tree build directory and selected
architecture).
(ede-linux--get-build-directory, ede-linux--get-archs)
(ede-linux--detect-architecture, ede-linux--get-architecture)
(ede-linux--include-path): Added function to detect Linux-specific
information.
(ede-linux-load): Set new Linux-specific information when creating
a project.
(ede-expand-filename-impl): Use new and more accurate include
information.
* semantic/scope.el (semantic-calculate-scope): Return a clone of
the scopecache, so that everyone is working with its own (shallow)
copy. Otherwise, if one caller is resetting the scope, it would
be reset for all others working with the scope cache as well.
2013-12-12 22:33:06 +01:00
|
|
|
( (append $2 $3) )
|
2011-07-29 22:06:43 -04:00
|
|
|
;
|
|
|
|
|
|
|
|
;; Klaus Berndl: Is necessary to parse stuff like
|
|
|
|
;; class list_of_facts : public list<fact>, public entity
|
|
|
|
;; and
|
|
|
|
;; list <shared_ptr<item> >::const_iterator l;
|
|
|
|
;; Parses also invalid(?) and senseless(?) c++-syntax like
|
|
|
|
;; symbol<template-spec>::symbol1<template-spec1>::test_iterator
|
|
|
|
;; but better parsing too much than to less
|
|
|
|
namespace-symbol
|
|
|
|
: symbol opt-template-specifier COLON COLON namespace-symbol
|
|
|
|
( (concat $1 "::" (car $5)) )
|
|
|
|
| symbol opt-template-specifier
|
|
|
|
( $1 )
|
|
|
|
;
|
|
|
|
|
|
|
|
;; Don't pull an optional template specifier at the end of the
|
|
|
|
;; namespace symbol so that it can be picked up by the type.
|
|
|
|
namespace-symbol-for-typeformbase
|
|
|
|
: symbol opt-template-specifier COLON COLON namespace-symbol-for-typeformbase
|
|
|
|
( (concat $1 "::" (car $5)) )
|
|
|
|
| symbol
|
|
|
|
( $1 )
|
|
|
|
;
|
|
|
|
;; namespace-symbol
|
|
|
|
;; : symbol COLON COLON namespace-symbol
|
|
|
|
;; ( (concat $1 "::" (car $4)) )
|
|
|
|
;; | symbol
|
|
|
|
;; ( $1 )
|
|
|
|
;; ;
|
|
|
|
|
|
|
|
namespace-opt-class
|
|
|
|
: symbol COLON COLON namespace-opt-class
|
|
|
|
( (concat $1 "::" (car $4)) )
|
|
|
|
;; Klaus Berndl: We must recognize template-specifiers here so we can
|
|
|
|
;; parse correctly the method-implementations of template-classes
|
|
|
|
;; outside the template-class-declaration Example:
|
|
|
|
;; TemplateClass1<T>::method_1(...)
|
|
|
|
| symbol opt-template-specifier COLON COLON
|
|
|
|
( $1 )
|
|
|
|
;
|
|
|
|
|
|
|
|
;; Klaus Berndl: The opt-class of a func-decl must be able to
|
|
|
|
;; recognize opt-classes with namespaces, e.g.
|
|
|
|
;; Test1::Test2::classname::
|
|
|
|
opt-class
|
|
|
|
: namespace-opt-class
|
|
|
|
( ,$1 )
|
|
|
|
| ;;EMPTY
|
|
|
|
( nil )
|
|
|
|
;
|
|
|
|
|
|
|
|
opt-destructor
|
|
|
|
: TILDE
|
|
|
|
( t )
|
|
|
|
| ;;EMPTY
|
|
|
|
( nil )
|
|
|
|
;
|
|
|
|
|
|
|
|
arg-list
|
|
|
|
: PAREN_BLCK knr-arguments
|
|
|
|
( ,$2 )
|
|
|
|
| PAREN_BLCK
|
|
|
|
(EXPANDFULL $1 arg-sub-list)
|
|
|
|
| VOID_BLCK
|
|
|
|
( )
|
|
|
|
;
|
|
|
|
|
|
|
|
knr-varnamelist
|
|
|
|
: varname COMA knr-varnamelist
|
|
|
|
( ,(cons $1 $3) )
|
|
|
|
| varname
|
|
|
|
( $1 )
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
|
|
knr-one-variable-decl
|
|
|
|
: declmods typeformbase cv-declmods knr-varnamelist
|
|
|
|
( VARIABLE-TAG (nreverse $4) $2 nil
|
|
|
|
:constant-flag (if (member "const" (append $3)) t nil)
|
|
|
|
:typemodifiers (delete "const" $3)
|
|
|
|
)
|
|
|
|
;
|
|
|
|
|
|
|
|
knr-arguments
|
|
|
|
: knr-one-variable-decl SEMICOLON knr-arguments
|
|
|
|
( ,(append (semantic-expand-c-tag ,$1) ,$3) )
|
|
|
|
| knr-one-variable-decl SEMICOLON
|
|
|
|
( ,(semantic-expand-c-tag ,$1) )
|
|
|
|
;
|
|
|
|
|
|
|
|
arg-sub-list
|
|
|
|
: variablearg
|
|
|
|
( ,$1 )
|
|
|
|
| PERIOD PERIOD PERIOD RPAREN
|
|
|
|
(VARIABLE-TAG "..." "vararg" nil)
|
|
|
|
| COMA
|
|
|
|
( nil )
|
|
|
|
| LPAREN
|
|
|
|
( nil )
|
|
|
|
| RPAREN
|
|
|
|
( nil )
|
|
|
|
;
|
|
|
|
|
|
|
|
operatorsym
|
|
|
|
: LESS LESS EQUAL
|
|
|
|
( "<<=" )
|
|
|
|
| GREATER GREATER EQUAL
|
|
|
|
( ">>=" )
|
|
|
|
| LESS LESS
|
|
|
|
( "<<" )
|
|
|
|
| GREATER GREATER
|
|
|
|
( ">>" )
|
|
|
|
| EQUAL EQUAL
|
|
|
|
( "==" )
|
|
|
|
| LESS EQUAL
|
|
|
|
( "<=" )
|
|
|
|
| GREATER EQUAL
|
|
|
|
( ">=" )
|
|
|
|
| BANG EQUAL
|
|
|
|
( "!=" )
|
|
|
|
| PLUS EQUAL
|
|
|
|
( "+=" )
|
|
|
|
| MINUS EQUAL
|
|
|
|
( "-=" )
|
|
|
|
| STAR EQUAL
|
|
|
|
( "*=" )
|
|
|
|
| DIVIDE EQUAL
|
|
|
|
( "/=" )
|
|
|
|
| MOD EQUAL
|
|
|
|
( "%=" )
|
|
|
|
| AMPERSAND EQUAL
|
|
|
|
( "&=" )
|
|
|
|
| OR EQUAL
|
|
|
|
( "|=" )
|
|
|
|
| MINUS GREATER STAR
|
|
|
|
( "->*" )
|
|
|
|
| MINUS GREATER
|
|
|
|
( "->" )
|
|
|
|
| PARENS
|
|
|
|
( "()" )
|
|
|
|
| BRACKETS
|
|
|
|
( "[]" )
|
|
|
|
| LESS
|
|
|
|
| GREATER
|
|
|
|
| STAR
|
|
|
|
| PLUS PLUS
|
|
|
|
( "++" )
|
|
|
|
| PLUS
|
|
|
|
| MINUS MINUS
|
|
|
|
( "--" )
|
|
|
|
| MINUS
|
|
|
|
| AMPERSAND AMPERSAND
|
|
|
|
( "&&" )
|
|
|
|
| AMPERSAND
|
|
|
|
| OR OR
|
|
|
|
( "||" )
|
|
|
|
| OR
|
|
|
|
| DIVIDE
|
|
|
|
| EQUAL
|
|
|
|
| BANG
|
|
|
|
| TILDE
|
|
|
|
| MOD
|
|
|
|
| COMA
|
|
|
|
;; HAT EQUAL seems to have a really unpleasant result and
|
|
|
|
;; breaks everything after it. Leave it at the end, though it
|
|
|
|
;; doesn't seem to work.
|
|
|
|
| HAT EQUAL
|
|
|
|
( "^=" )
|
|
|
|
| HAT
|
|
|
|
;
|
|
|
|
|
|
|
|
functionname
|
|
|
|
: OPERATOR operatorsym
|
|
|
|
( ,$2 )
|
|
|
|
| semantic-list
|
|
|
|
( EXPAND $1 function-pointer )
|
|
|
|
| symbol
|
|
|
|
( $1 )
|
|
|
|
;
|
|
|
|
|
|
|
|
function-pointer
|
2014-02-06 21:57:24 +01:00
|
|
|
: LPAREN STAR opt-symbol RPAREN
|
|
|
|
( (concat "*" ,(car $3)) )
|
2012-10-02 02:10:29 +08:00
|
|
|
| LPAREN symbol RPAREN
|
|
|
|
( $2 )
|
2011-07-29 22:06:43 -04:00
|
|
|
;
|
|
|
|
|
|
|
|
fun-or-proto-end
|
|
|
|
: SEMICOLON
|
|
|
|
( t )
|
|
|
|
| semantic-list
|
|
|
|
( nil )
|
2011-11-14 15:59:56 -08:00
|
|
|
;; Here is an annoying feature of C++ pure virtual methods
|
2011-07-29 22:06:43 -04:00
|
|
|
| EQUAL ZERO SEMICOLON
|
|
|
|
( :pure-virtual-flag )
|
|
|
|
| fun-try-end
|
|
|
|
( nil )
|
|
|
|
;
|
|
|
|
|
|
|
|
fun-try-end
|
|
|
|
: TRY opt-initializers BRACE_BLCK fun-try-several-catches
|
|
|
|
( nil )
|
|
|
|
;
|
|
|
|
|
|
|
|
fun-try-several-catches
|
|
|
|
: CATCH PAREN_BLCK BRACE_BLCK fun-try-several-catches
|
|
|
|
( )
|
|
|
|
| CATCH BRACE_BLCK fun-try-several-catches
|
|
|
|
( )
|
|
|
|
| ;; EMPTY
|
|
|
|
( )
|
|
|
|
;
|
|
|
|
|
|
|
|
type-cast
|
|
|
|
: semantic-list
|
|
|
|
( EXPAND $1 type-cast-list )
|
|
|
|
;
|
|
|
|
|
|
|
|
type-cast-list
|
|
|
|
: open-paren typeformbase close-paren
|
|
|
|
;
|
|
|
|
|
2014-02-06 21:57:24 +01:00
|
|
|
opt-brackets-after-symbol
|
|
|
|
: brackets-after-symbol
|
|
|
|
| ;; EMPTY
|
|
|
|
;
|
|
|
|
|
Merge with CEDET upstream.
* admin/grammars/c.by (expr-binop): Add MOD.
(variablearg): Add 'opt-assign'.
(variablearg, varnamelist): Add default values so that it can be
later expanded into the tag.
(opt-stuff-after-symbol): Rename to 'brackets-after-symbol' and
remove empty match.
(multi-stage-dereference): Adapt to above rename.
(unaryexpression): Use 'symbol' instead of 'namespace-symbol',
since the latter also leads to an empty match at the end which
would make this too greedy.
(variablearg-opt-name): Support parsing of function pointers
inside an argument list.
* semantic/analyze.el
(semantic-analyze-find-tag-sequence-default): Always add scope to
the local miniscope for each type. Otherwise, structure tags are
not analyzed correctly. Also, always search the extended
miniscope even when not dealing with types.
* semantic/ctxt.el (semantic-get-local-variables-default): Also
try to parse local variables for buffers which are currently
marked as unparseable. Otherwise, it is often impossible to
complete local variables.
* semantic/scope.el (semantic-analyze-scoped-types-default): If we
cannot find a type in the typecache, also look into the the types
we already found. This is necessary since in C++, a 'using
namespace' can be dependend on a previous one.
(semantic-completable-tags-from-type): When creating the list of
completable types, pull in types which are referenced through
'using' statements, and also preserve their filenames.
* semanitc/bovine/c.el (semantic/analyze/refs): Require.
(semantic-analyze-tag-references): New override. Mainly copied
from the default implementation, but if nothing could be found (or
just the tag itself), drop all namespaces from the scope and
search again. This is necessary for implementations which are
defined outside of the namespace and only pull those in through
'using' statements.
(semantic-ctxt-scoped-types): Go through all tags around point and
search them for using statements. In the case for using
statements outside of function scope, append them in the correct
order instead of using 'cons'. This is important since using
statements may depend on previous ones.
(semantic-expand-c-tag-namelist): Do not try to parse struct
definitions as default values. The grammar parser seems to return
the point positions slightly differently (as a cons instead of a
list). Also, set parent for typedefs to 'nil'. It does not
really make sense to set a parent class for typedefs, and it can
also lead to endless loops when calculating scope.
(semantic-c-reconstitute-token): Change handling of function
pointers; instead of seeing them as variables, handle them as
functions with a 'function-pointer' attribute. Also, correctly
deal with function pointers as function arguments.
(semantic-c-reconstitute-function-arglist): New function to parse
function pointers inside an argument list.
(semantic-format-tag-name): Use 'function-pointer' attribute
instead of the old 'functionpointer-flag'.
(semantic-cpp-lexer): Use new `semantic-lex-spp-paren-or-list'.
* semantic/bovine/gcc.el (semantic-gcc-setup): Add 'features.h' to
the list of files whose preprocessor symbols are included. This
pulls in things like __USE_POSIX and similar.
* semantic/format.el (semantic-format-tag-prototype-default):
Display default values if available.
* semantic/analyze/refs.el (semantic-analyze-refs-impl)
(semantic-analyze-refs-proto): Add 'default-value' as ignorable in
call to `semantic-tag-similar-p'.
* semantic/db-mode.el (semanticdb-semantic-init-hook-fcn): Always
set buffer for `semanticdb-current-table'.
* semantic/db.el (semanticdb-table::semanticdb-refresh-table): The
previous change turned up a bug in this method. Since the current
table now correctly has a buffer set, the first clause in the
`cond' would be taken, but there was a `save-excursion' missing.
* semantic/lex-spp.el (semantic-c-end-of-macro): Declare.
(semantic-lex-spp-token-macro-to-macro-stream): Deal with macros
which open/close a scope. For this, leave an overlay if we
encounter a single open paren and return a semantic-list in the
lexer. When this list gets expanded, retrieve the old position
from the overlay. See the comments in the function for further
details.
(semantic-lex-spp-find-closing-macro): New function to find the
next macro which closes scope (i.e., has a closing paren).
(semantic-lex-spp-replace-or-symbol-or-keyword): Go to end of
closing macro if necessary.
(semantic-lex-spp-paren-or-list): New lexer to specially deal with
parens in macro definitions.
* semantic/decorate/mode.el (semantic-decoration-mode): Do not
decorate available tags immediately but in an idle timer, since
EDE will usually not be activated yet, which will make it
impossible to find project includes.
* semantic/decorate/include.el
(semantic-decoration-on-includes-highlight-default): Remove
'unloaded' from throttle when decorating includes, otherwise all
would be loaded. Rename 'table' to 'currenttable' to make things
clearer.
* ede/linux.el (cl): Require during compile.
* ede/linux.el (project-linux-build-directory-default)
(project-linux-architecture-default): Add customizable variables.
(ede-linux-project): Add additional slots to track Linux-specific
information (out-of-tree build directory and selected
architecture).
(ede-linux--get-build-directory, ede-linux--get-archs)
(ede-linux--detect-architecture, ede-linux--get-architecture)
(ede-linux--include-path): Added function to detect Linux-specific
information.
(ede-linux-load): Set new Linux-specific information when creating
a project.
(ede-expand-filename-impl): Use new and more accurate include
information.
* semantic/scope.el (semantic-calculate-scope): Return a clone of
the scopecache, so that everyone is working with its own (shallow)
copy. Otherwise, if one caller is resetting the scope, it would
be reset for all others working with the scope cache as well.
2013-12-12 22:33:06 +01:00
|
|
|
brackets-after-symbol
|
2011-07-29 22:06:43 -04:00
|
|
|
: PAREN_BLCK
|
|
|
|
| BRACK_BLCK
|
|
|
|
;
|
|
|
|
|
|
|
|
multi-stage-dereference
|
2014-02-06 21:57:24 +01:00
|
|
|
: namespace-symbol opt-brackets-after-symbol
|
|
|
|
PERIOD multi-stage-dereference ;; method call
|
|
|
|
| namespace-symbol opt-brackets-after-symbol
|
|
|
|
MINUS GREATER multi-stage-dereference ;;method call
|
|
|
|
| namespace-symbol opt-brackets-after-symbol
|
|
|
|
PERIOD namespace-symbol opt-brackets-after-symbol
|
|
|
|
| namespace-symbol opt-brackets-after-symbol
|
|
|
|
MINUS GREATER namespace-symbol opt-brackets-after-symbol
|
Merge with CEDET upstream.
* admin/grammars/c.by (expr-binop): Add MOD.
(variablearg): Add 'opt-assign'.
(variablearg, varnamelist): Add default values so that it can be
later expanded into the tag.
(opt-stuff-after-symbol): Rename to 'brackets-after-symbol' and
remove empty match.
(multi-stage-dereference): Adapt to above rename.
(unaryexpression): Use 'symbol' instead of 'namespace-symbol',
since the latter also leads to an empty match at the end which
would make this too greedy.
(variablearg-opt-name): Support parsing of function pointers
inside an argument list.
* semantic/analyze.el
(semantic-analyze-find-tag-sequence-default): Always add scope to
the local miniscope for each type. Otherwise, structure tags are
not analyzed correctly. Also, always search the extended
miniscope even when not dealing with types.
* semantic/ctxt.el (semantic-get-local-variables-default): Also
try to parse local variables for buffers which are currently
marked as unparseable. Otherwise, it is often impossible to
complete local variables.
* semantic/scope.el (semantic-analyze-scoped-types-default): If we
cannot find a type in the typecache, also look into the the types
we already found. This is necessary since in C++, a 'using
namespace' can be dependend on a previous one.
(semantic-completable-tags-from-type): When creating the list of
completable types, pull in types which are referenced through
'using' statements, and also preserve their filenames.
* semanitc/bovine/c.el (semantic/analyze/refs): Require.
(semantic-analyze-tag-references): New override. Mainly copied
from the default implementation, but if nothing could be found (or
just the tag itself), drop all namespaces from the scope and
search again. This is necessary for implementations which are
defined outside of the namespace and only pull those in through
'using' statements.
(semantic-ctxt-scoped-types): Go through all tags around point and
search them for using statements. In the case for using
statements outside of function scope, append them in the correct
order instead of using 'cons'. This is important since using
statements may depend on previous ones.
(semantic-expand-c-tag-namelist): Do not try to parse struct
definitions as default values. The grammar parser seems to return
the point positions slightly differently (as a cons instead of a
list). Also, set parent for typedefs to 'nil'. It does not
really make sense to set a parent class for typedefs, and it can
also lead to endless loops when calculating scope.
(semantic-c-reconstitute-token): Change handling of function
pointers; instead of seeing them as variables, handle them as
functions with a 'function-pointer' attribute. Also, correctly
deal with function pointers as function arguments.
(semantic-c-reconstitute-function-arglist): New function to parse
function pointers inside an argument list.
(semantic-format-tag-name): Use 'function-pointer' attribute
instead of the old 'functionpointer-flag'.
(semantic-cpp-lexer): Use new `semantic-lex-spp-paren-or-list'.
* semantic/bovine/gcc.el (semantic-gcc-setup): Add 'features.h' to
the list of files whose preprocessor symbols are included. This
pulls in things like __USE_POSIX and similar.
* semantic/format.el (semantic-format-tag-prototype-default):
Display default values if available.
* semantic/analyze/refs.el (semantic-analyze-refs-impl)
(semantic-analyze-refs-proto): Add 'default-value' as ignorable in
call to `semantic-tag-similar-p'.
* semantic/db-mode.el (semanticdb-semantic-init-hook-fcn): Always
set buffer for `semanticdb-current-table'.
* semantic/db.el (semanticdb-table::semanticdb-refresh-table): The
previous change turned up a bug in this method. Since the current
table now correctly has a buffer set, the first clause in the
`cond' would be taken, but there was a `save-excursion' missing.
* semantic/lex-spp.el (semantic-c-end-of-macro): Declare.
(semantic-lex-spp-token-macro-to-macro-stream): Deal with macros
which open/close a scope. For this, leave an overlay if we
encounter a single open paren and return a semantic-list in the
lexer. When this list gets expanded, retrieve the old position
from the overlay. See the comments in the function for further
details.
(semantic-lex-spp-find-closing-macro): New function to find the
next macro which closes scope (i.e., has a closing paren).
(semantic-lex-spp-replace-or-symbol-or-keyword): Go to end of
closing macro if necessary.
(semantic-lex-spp-paren-or-list): New lexer to specially deal with
parens in macro definitions.
* semantic/decorate/mode.el (semantic-decoration-mode): Do not
decorate available tags immediately but in an idle timer, since
EDE will usually not be activated yet, which will make it
impossible to find project includes.
* semantic/decorate/include.el
(semantic-decoration-on-includes-highlight-default): Remove
'unloaded' from throttle when decorating includes, otherwise all
would be loaded. Rename 'table' to 'currenttable' to make things
clearer.
* ede/linux.el (cl): Require during compile.
* ede/linux.el (project-linux-build-directory-default)
(project-linux-architecture-default): Add customizable variables.
(ede-linux-project): Add additional slots to track Linux-specific
information (out-of-tree build directory and selected
architecture).
(ede-linux--get-build-directory, ede-linux--get-archs)
(ede-linux--detect-architecture, ede-linux--get-architecture)
(ede-linux--include-path): Added function to detect Linux-specific
information.
(ede-linux-load): Set new Linux-specific information when creating
a project.
(ede-expand-filename-impl): Use new and more accurate include
information.
* semantic/scope.el (semantic-calculate-scope): Return a clone of
the scopecache, so that everyone is working with its own (shallow)
copy. Otherwise, if one caller is resetting the scope, it would
be reset for all others working with the scope cache as well.
2013-12-12 22:33:06 +01:00
|
|
|
| namespace-symbol brackets-after-symbol
|
2011-07-29 22:06:43 -04:00
|
|
|
;
|
|
|
|
|
|
|
|
string-seq
|
|
|
|
: string string-seq
|
|
|
|
( (concat $1 (car $2)) )
|
|
|
|
| string
|
|
|
|
( $1 )
|
|
|
|
;
|
|
|
|
|
|
|
|
expr-start
|
|
|
|
: MINUS
|
|
|
|
| PLUS
|
|
|
|
| STAR
|
|
|
|
| AMPERSAND
|
|
|
|
;
|
|
|
|
|
|
|
|
expr-binop
|
|
|
|
: MINUS
|
|
|
|
| PLUS
|
|
|
|
| STAR
|
|
|
|
| DIVIDE
|
|
|
|
| AMPERSAND AMPERSAND
|
|
|
|
| AMPERSAND
|
|
|
|
| OR OR
|
|
|
|
| OR
|
Merge with CEDET upstream.
* admin/grammars/c.by (expr-binop): Add MOD.
(variablearg): Add 'opt-assign'.
(variablearg, varnamelist): Add default values so that it can be
later expanded into the tag.
(opt-stuff-after-symbol): Rename to 'brackets-after-symbol' and
remove empty match.
(multi-stage-dereference): Adapt to above rename.
(unaryexpression): Use 'symbol' instead of 'namespace-symbol',
since the latter also leads to an empty match at the end which
would make this too greedy.
(variablearg-opt-name): Support parsing of function pointers
inside an argument list.
* semantic/analyze.el
(semantic-analyze-find-tag-sequence-default): Always add scope to
the local miniscope for each type. Otherwise, structure tags are
not analyzed correctly. Also, always search the extended
miniscope even when not dealing with types.
* semantic/ctxt.el (semantic-get-local-variables-default): Also
try to parse local variables for buffers which are currently
marked as unparseable. Otherwise, it is often impossible to
complete local variables.
* semantic/scope.el (semantic-analyze-scoped-types-default): If we
cannot find a type in the typecache, also look into the the types
we already found. This is necessary since in C++, a 'using
namespace' can be dependend on a previous one.
(semantic-completable-tags-from-type): When creating the list of
completable types, pull in types which are referenced through
'using' statements, and also preserve their filenames.
* semanitc/bovine/c.el (semantic/analyze/refs): Require.
(semantic-analyze-tag-references): New override. Mainly copied
from the default implementation, but if nothing could be found (or
just the tag itself), drop all namespaces from the scope and
search again. This is necessary for implementations which are
defined outside of the namespace and only pull those in through
'using' statements.
(semantic-ctxt-scoped-types): Go through all tags around point and
search them for using statements. In the case for using
statements outside of function scope, append them in the correct
order instead of using 'cons'. This is important since using
statements may depend on previous ones.
(semantic-expand-c-tag-namelist): Do not try to parse struct
definitions as default values. The grammar parser seems to return
the point positions slightly differently (as a cons instead of a
list). Also, set parent for typedefs to 'nil'. It does not
really make sense to set a parent class for typedefs, and it can
also lead to endless loops when calculating scope.
(semantic-c-reconstitute-token): Change handling of function
pointers; instead of seeing them as variables, handle them as
functions with a 'function-pointer' attribute. Also, correctly
deal with function pointers as function arguments.
(semantic-c-reconstitute-function-arglist): New function to parse
function pointers inside an argument list.
(semantic-format-tag-name): Use 'function-pointer' attribute
instead of the old 'functionpointer-flag'.
(semantic-cpp-lexer): Use new `semantic-lex-spp-paren-or-list'.
* semantic/bovine/gcc.el (semantic-gcc-setup): Add 'features.h' to
the list of files whose preprocessor symbols are included. This
pulls in things like __USE_POSIX and similar.
* semantic/format.el (semantic-format-tag-prototype-default):
Display default values if available.
* semantic/analyze/refs.el (semantic-analyze-refs-impl)
(semantic-analyze-refs-proto): Add 'default-value' as ignorable in
call to `semantic-tag-similar-p'.
* semantic/db-mode.el (semanticdb-semantic-init-hook-fcn): Always
set buffer for `semanticdb-current-table'.
* semantic/db.el (semanticdb-table::semanticdb-refresh-table): The
previous change turned up a bug in this method. Since the current
table now correctly has a buffer set, the first clause in the
`cond' would be taken, but there was a `save-excursion' missing.
* semantic/lex-spp.el (semantic-c-end-of-macro): Declare.
(semantic-lex-spp-token-macro-to-macro-stream): Deal with macros
which open/close a scope. For this, leave an overlay if we
encounter a single open paren and return a semantic-list in the
lexer. When this list gets expanded, retrieve the old position
from the overlay. See the comments in the function for further
details.
(semantic-lex-spp-find-closing-macro): New function to find the
next macro which closes scope (i.e., has a closing paren).
(semantic-lex-spp-replace-or-symbol-or-keyword): Go to end of
closing macro if necessary.
(semantic-lex-spp-paren-or-list): New lexer to specially deal with
parens in macro definitions.
* semantic/decorate/mode.el (semantic-decoration-mode): Do not
decorate available tags immediately but in an idle timer, since
EDE will usually not be activated yet, which will make it
impossible to find project includes.
* semantic/decorate/include.el
(semantic-decoration-on-includes-highlight-default): Remove
'unloaded' from throttle when decorating includes, otherwise all
would be loaded. Rename 'table' to 'currenttable' to make things
clearer.
* ede/linux.el (cl): Require during compile.
* ede/linux.el (project-linux-build-directory-default)
(project-linux-architecture-default): Add customizable variables.
(ede-linux-project): Add additional slots to track Linux-specific
information (out-of-tree build directory and selected
architecture).
(ede-linux--get-build-directory, ede-linux--get-archs)
(ede-linux--detect-architecture, ede-linux--get-architecture)
(ede-linux--include-path): Added function to detect Linux-specific
information.
(ede-linux-load): Set new Linux-specific information when creating
a project.
(ede-expand-filename-impl): Use new and more accurate include
information.
* semantic/scope.el (semantic-calculate-scope): Return a clone of
the scopecache, so that everyone is working with its own (shallow)
copy. Otherwise, if one caller is resetting the scope, it would
be reset for all others working with the scope cache as well.
2013-12-12 22:33:06 +01:00
|
|
|
| MOD
|
2011-07-29 22:06:43 -04:00
|
|
|
;; There are more.
|
|
|
|
;
|
|
|
|
|
|
|
|
;; Use expression for parsing only. Don't actually return anything
|
|
|
|
;; for now. Hopefully we can fix this later.
|
|
|
|
expression
|
Update from CEDET trunk.
* grammars/c.by (template-type): Add :template-specifier and
:typevar to capture extra details about the template.
(opt-post-fcn-modifiers): Splice in the found symbol into the
return value correctly.
(QUESTION): New punctuation.
(expression): Add ternary conditional support.
* grammars/scheme.by (MODULE): New token.
(scheme): Handle expanding the MODULE tag.
(scheme-list): Remove closeparen required match.
(scheme-in-list): Remove extraneous matches for DEFINE. Add
support for MODULE Simplify matching for code & make work.
(name-args, name-arg-list, name-arg-expand): Make it work.
* semantic.el (semantic-mode): Add/remove 3
completion-at-point-functions.
(semantic-completion-at-point-function): Removed.
(semantic-analyze-completion-at-point-function)
(semantic-analyze-notc-completion-at-point-function)
(semantic-analyze-nolongprefix-completion-at-point-function): New
completion at point functions.
* semantic/doc.el (semantic-doc-snarf-comment-for-tag): Fix case
when comment-end is empty string.
* semantic/debug.el
(semantic-debug-parser-debugger-source): New buffer local
variable.
(semantic-debug-interface): Add 'nil' initform to overlays.
(semantic-debug-mode): Remove read-only tags from buffers on exit.
(semantic-debug): Add autoload cookie. Force the language
specific debugger to load.
* semantic/db.el (generic::semanticdb-full-filename): New generic
method to allow this method to be used on buffer names via an
associated database.
* semantic/symref.el
(semantic-symref-cleanup-recent-buffers-fcn): When cleaning up
buffers, don't clean up buffers that are being used (i.e., in a
window) when the hook fires.
(semantic-symref-recently-opened-buffers): New tracking variable.
(semantic-symref-cleanup-recent-buffers-fcn): New hook fcn.
(semantic-symref-result-get-tags): Move logic into
`semantic-symref-hit-to-tag-via-buffer', and cleanup buffers via
the symref cleanup function in post-command-hook.
(semantic-symref-hit-to-tag-via-buffer): Logic that used to be
from above.
(semantic-symref-hit-to-tag-via-db): New.
* semantic/analyze.el:
(semantic-analyze-find-tag-sequence-default): If first entry in
sequence is the only one, apply tagclass filter.
(semantic-analyze-princ-sequence): Show slot even if empty.
(semantic-analyze-find-tag-sequence)
(semantic-analyze-find-tag-sequence-default): Add flags argument.
Add support for forcing the final entry of the sequence to be of
class variable.
(semantic-analyze-find-tag): Fix bug where input class filter was
ignored if there was a typecache match.
(semantic-analyze-current-context-default): For assignments, the
assignee now must be of class variable.
* semantic/analyze/complete.el
(semantic-analyze-possible-completions-default): Add
'no-longprefix' flag. When used, the prefix and prefixtypes are
shortened to just the last symbol.
* semantic/bovine/c.el (semantic-c-do-lex-if): Catch errors from
'hideif', and push to the parser warning stack.
(semantic-lex-cpp-define): When a comment is at the end of a
macro, do not subtract an extra 1 from the found position. Fixes
bug with: #define foo (a)/**/ adding an extra ')' to the stream.
* semantic/bovine/scm.el (semantic-lex-scheme-symbol): Allow
symbols to be one char long.
* semantic/bovine/grammar.el
(bovine-grammar-calculate-source-on-path): New.
(bovine-grammar-setupcode-builder): Use it.
* ede.el (ede/detect): New require.
(ede-version): Bump version
(ede-initialize-state-current-buffer): Use new
`ede-detect-directory-for-project' to detect projects first
instead of depending on currente dir only.
(ede-delete-project-from-global-list): New.
(ede-flush-deleted-projects): Use above.
(ede-check-project-query-fcn): New variable
(ede-check-project-directory): Use above when querying the user.
Added to support unit testing of this security measure.
(ede-initialize-state-current-buffer): Use
`ede-directory-project-cons' instead of the -detect- fcn to take
advantage of the cache. Pass found project into
`ede-load-project-file'.
(ede-load-project-file): Add new input DETECTIN.
(ede-rescan-toplevel): Get the proj root a better way.
(ede-load-project-file): Return the loaded object. When asking
for existing project, ask for an exact match.
(ede-initialize-state-current-buffer): Simplify some conditional
logic.
(ede-load-project-file): Simplify conditional logic.
(ede-global-list-sanity-check): New Testing fcn.
(ede-parent-project): Replace old code with call to faster
`ede-find-subproject-for-directory'.
(ede-load-project-file): Use
`ede-directory-get-toplevel-open-project' instead of above
deleted. Rename "pfc" to "autoloader". Use
`ede-directory-project-cons' to detect a project. Delete no
project found case where we search up the tree.
* ede/auto.el (ede-project-autoload): Fix doc typo. Add
`:root-only' slot.
(ede-auto-load-project): Doc update: warn to not use.
(ede-dir-to-projectfile): Deleted.
(ede-project-autoload-dirmatch): Add subdir-only slot. Make
configdatastash unbound by default.
(ede-do-dirmatch): If subdir-only is true, then don't allow exact
matches. Account for configdatastash as unbound. Assume value of
nil means no tool installed. Make sure loaded path matches from
beginning. Stash the regexp, not the raw string.
(ede-project-class-files): Note that makefile and automake are not
root only.
(ede-auto-detect-in-dir): New (for use with `ede/detect.el').
(ede-project-dirmatch-p): Deleted.
(ede-project-root-directory): Remove body, return nil.
(ede-project-autoload): :proj-root-dirmatch can be null & doc fix.
(ede-auto-detect-in-dir): If there is no :proj-file, check for a
dirmatch.
* ede/generic.el (ede/config): Replace require of ede.
(ede-generic-new-autoloader): Generic projects are now safe by
default. Note this is NOT a root only project.
(project-rescan, ede-project-root, ede-generic-target-java)
(ede-java-classpath, ede-find-subproject-for-directory): New.
(ede-enable-generic-projects): Add new autoloaders for git, bzr,
hg, sv, CVS.
(ede-generic-vc-project)
(ede-generic-vc-project::ede-generic-setup-configuration): New.
(ede-generic-config): Remove slots: c-include-path,
c-preprocessor-table, c-preprocessor-files, classpath,
build-command, debug-command, run command. Inherit from
ede-extra-config-build, ede-extra-config-program. Make
run-command :value match :custom so only strings are accepted.
Add some more :group slot specifiers.
(ede-generic-project): Add mixins `ede-project-with-config-c' and
`ede-project-with-config-java'. Inherit from
`ede-project-with-config-build',
`ede-project-with-config-program'. Subclass
`ede-project-with-config'. Remove duplication from new baseclass.
(ede-generic-target): Inherit from `ede-target-with-config-build',
`ede-target-with-config-program'. Subclass `ede-target-with-config'.
(ede-generic-target-c-cpp): Add mixin `ede-target-with-config-c'.
(ede-generic-target-java): Add mixin `ede-target-with-config-java'.
(ede-preprocessor-map, ede-system-include-path)
(edejava-classpath): Deleted, moved to config.el.
(project-compile-project, project-compile-target)
(project-debug-target, project-run-target): Deleted.
(ede-generic-get-configuration, ede-generic-setup-configuration)
(ede-commit-project, project-rescan)
(ede-generic-project::ede-customize)
(ede-generic-target::ede-customize)
(ede-generic-config::eieio-done-customizing)
(ede-generic-config::ede-commit): Deleted. Subsumed by new
baseclass.
(ede-preprocessor-map, ede-system-include-path)
(project-debug-target, project-run-target): Call new
`ede-config-get-configuration' instead of old version.
(ede-generic-load): Do not add to global list here.
* ede/files.el (ede-find-project-root)
(ede-files-find-existing)
(ede-directory-get-toplevel-open-project-new): Deleted.
(ede-project-root-directory): Use `ede-project-root' first.
(ede-project-directory-remove-hash)
(ede--directory-project-from-hash)
(ede--directory-project-add-description-to-hash): Rename to make
internal symbols (via --). Expand input dir first.
(ede-directory-project-p): Doc fix (note obsoleted.)
(ede-toplevel-project-or-nil): Alias to `ede-toplevel-project'.
(ede-toplevel-project): Doc Fix. Delete commented out old code.
Simplify returning result from ede-detect-directory-for-project.
(ede-directory-get-open-project): Support when
inodes are disabled. If disabled to str compare on root project.
(ede-directory-get-toplevel-open-project): Enabled nested
projects. When doing directory name matching, save the 'short'
version of an answer (non-exact match) and eventually select the
shortest answer at the end. Expand the filename of tested
projects. Better support for when inodes are disabled. Add
'exact' option so that it will return a project that is an exact
match.
(ede-find-subproject-for-directory): Small optimization to run
`file-truename' less often.
(ede-directory-project-p): Move content, then use
`ede-directory-project-cons'. Use
`ede-detect-directory-for-project', replacing old detection loop.
(ede-directory-project-cons): New, from above.
(ede-toplevel-project): Toss old scanning code. Use
`ede-detect-directory-for-project' instead.
(ede-directory-get-toplevel-open-project-new): New.
* ede/linux.el (ede-linux-project-root): Deleted.
(ede-project-autoload): Remove dirmatch entry - it is no longer
needed.
* lisp/cedet/ede/proj.el (project-rescan): Replace direct
manipulation of `ede-projects' with equivalent and better
functions.
(ede-proj-load): Replace call to test if dir has project to
explicity ask filesystem if Project.ede is there.
* ede/config.el:
* ede/detect.el: New files.
* ede/project-am.el (project-run-target): Add "./" to program to
run for systems where '.' isn't in PATH.
(project-am-load): Remove old code regarding `ede-constructing'.
Just read in the makefiles.
* ede/linux.el (ede-linux-load): Do not add to global list here.
Don't check for existing anymore.
(project-rescan): New.
(ede-linux-project-list, ede-linux-file-existing): Deleted.
(ede-linux-project-root): Delete body. Need symbol for autoloads
for now.
(ede-linux-project): No longer instance tracker.
(ede-project-autoload): Don't provide :proj-root
* ede/emacs.el (ede-emacs-load): Do not add project to global list
here. Don't look for existing first.
(ede-project-autoload): Remove dirmatch entry - it is no longer
needed. Don't provide proj-root anymore.
(ede-emacs-project-list, ede-emacs-file-existing): Delete.
(ede-emacs-project-root): Remove body (need symbol for loaddefs
still).
(ede-emacs-project): Do not instance track anymore.
* ede/cpp-root.el (initialize-instance): Remove commented code.
Add note about why we are adding the project to the master list.
Make sure if we are replacing a prev version, remove from global
list.
(ede-cpp-root-file-existing)
(ede-cpp-root-project-file-for-dir)
(ede-cpp-root-count, ede-cpp-root-project-root, ede-cpp-root-load)
(ede-project-autoload cpp-root): Deleted.
(ede-project-root-directory): Return :directory instead of
calculating from :file.
(project-rescan): New.
* ede/base.el (ede-toplevel): Only use buffer cached value if
subproj not passed in.
* srecode/java.el (srecode-semantic-handle-:java): Fix case when
an EDE project didn't support java paths.
* lisp/cedet/ede/proj-elisp.el
(ede-proj-target-elisp::ede-proj-tweak-autoconf): Kill buffer
after saving modified elisp-comp script, as to avoid "file has
changed on disk; really edit the buffer" questions when script
gets rewritten.
* emacs-lisp/eieio-custom.el (eieio-customize-object): Set
eieio-cog (current group) to g, which is an improved form of input
group.
* srecode/doc-cpp.srt (mode): Set to c mode so this works with
both C and C++.
2014-11-10 01:04:30 +01:00
|
|
|
: unaryexpression QUESTION unaryexpression COLON unaryexpression
|
|
|
|
( (identity start) (identity end) )
|
|
|
|
| unaryexpression expr-binop unaryexpression
|
2011-07-29 22:06:43 -04:00
|
|
|
( (identity start) (identity end) )
|
|
|
|
| unaryexpression
|
|
|
|
( (identity start) (identity end) )
|
|
|
|
;
|
|
|
|
|
|
|
|
unaryexpression
|
|
|
|
: number
|
|
|
|
| multi-stage-dereference
|
|
|
|
| NEW multi-stage-dereference
|
|
|
|
| NEW builtintype-types semantic-list
|
Merge with CEDET upstream.
* admin/grammars/c.by (expr-binop): Add MOD.
(variablearg): Add 'opt-assign'.
(variablearg, varnamelist): Add default values so that it can be
later expanded into the tag.
(opt-stuff-after-symbol): Rename to 'brackets-after-symbol' and
remove empty match.
(multi-stage-dereference): Adapt to above rename.
(unaryexpression): Use 'symbol' instead of 'namespace-symbol',
since the latter also leads to an empty match at the end which
would make this too greedy.
(variablearg-opt-name): Support parsing of function pointers
inside an argument list.
* semantic/analyze.el
(semantic-analyze-find-tag-sequence-default): Always add scope to
the local miniscope for each type. Otherwise, structure tags are
not analyzed correctly. Also, always search the extended
miniscope even when not dealing with types.
* semantic/ctxt.el (semantic-get-local-variables-default): Also
try to parse local variables for buffers which are currently
marked as unparseable. Otherwise, it is often impossible to
complete local variables.
* semantic/scope.el (semantic-analyze-scoped-types-default): If we
cannot find a type in the typecache, also look into the the types
we already found. This is necessary since in C++, a 'using
namespace' can be dependend on a previous one.
(semantic-completable-tags-from-type): When creating the list of
completable types, pull in types which are referenced through
'using' statements, and also preserve their filenames.
* semanitc/bovine/c.el (semantic/analyze/refs): Require.
(semantic-analyze-tag-references): New override. Mainly copied
from the default implementation, but if nothing could be found (or
just the tag itself), drop all namespaces from the scope and
search again. This is necessary for implementations which are
defined outside of the namespace and only pull those in through
'using' statements.
(semantic-ctxt-scoped-types): Go through all tags around point and
search them for using statements. In the case for using
statements outside of function scope, append them in the correct
order instead of using 'cons'. This is important since using
statements may depend on previous ones.
(semantic-expand-c-tag-namelist): Do not try to parse struct
definitions as default values. The grammar parser seems to return
the point positions slightly differently (as a cons instead of a
list). Also, set parent for typedefs to 'nil'. It does not
really make sense to set a parent class for typedefs, and it can
also lead to endless loops when calculating scope.
(semantic-c-reconstitute-token): Change handling of function
pointers; instead of seeing them as variables, handle them as
functions with a 'function-pointer' attribute. Also, correctly
deal with function pointers as function arguments.
(semantic-c-reconstitute-function-arglist): New function to parse
function pointers inside an argument list.
(semantic-format-tag-name): Use 'function-pointer' attribute
instead of the old 'functionpointer-flag'.
(semantic-cpp-lexer): Use new `semantic-lex-spp-paren-or-list'.
* semantic/bovine/gcc.el (semantic-gcc-setup): Add 'features.h' to
the list of files whose preprocessor symbols are included. This
pulls in things like __USE_POSIX and similar.
* semantic/format.el (semantic-format-tag-prototype-default):
Display default values if available.
* semantic/analyze/refs.el (semantic-analyze-refs-impl)
(semantic-analyze-refs-proto): Add 'default-value' as ignorable in
call to `semantic-tag-similar-p'.
* semantic/db-mode.el (semanticdb-semantic-init-hook-fcn): Always
set buffer for `semanticdb-current-table'.
* semantic/db.el (semanticdb-table::semanticdb-refresh-table): The
previous change turned up a bug in this method. Since the current
table now correctly has a buffer set, the first clause in the
`cond' would be taken, but there was a `save-excursion' missing.
* semantic/lex-spp.el (semantic-c-end-of-macro): Declare.
(semantic-lex-spp-token-macro-to-macro-stream): Deal with macros
which open/close a scope. For this, leave an overlay if we
encounter a single open paren and return a semantic-list in the
lexer. When this list gets expanded, retrieve the old position
from the overlay. See the comments in the function for further
details.
(semantic-lex-spp-find-closing-macro): New function to find the
next macro which closes scope (i.e., has a closing paren).
(semantic-lex-spp-replace-or-symbol-or-keyword): Go to end of
closing macro if necessary.
(semantic-lex-spp-paren-or-list): New lexer to specially deal with
parens in macro definitions.
* semantic/decorate/mode.el (semantic-decoration-mode): Do not
decorate available tags immediately but in an idle timer, since
EDE will usually not be activated yet, which will make it
impossible to find project includes.
* semantic/decorate/include.el
(semantic-decoration-on-includes-highlight-default): Remove
'unloaded' from throttle when decorating includes, otherwise all
would be loaded. Rename 'table' to 'currenttable' to make things
clearer.
* ede/linux.el (cl): Require during compile.
* ede/linux.el (project-linux-build-directory-default)
(project-linux-architecture-default): Add customizable variables.
(ede-linux-project): Add additional slots to track Linux-specific
information (out-of-tree build directory and selected
architecture).
(ede-linux--get-build-directory, ede-linux--get-archs)
(ede-linux--detect-architecture, ede-linux--get-architecture)
(ede-linux--include-path): Added function to detect Linux-specific
information.
(ede-linux-load): Set new Linux-specific information when creating
a project.
(ede-expand-filename-impl): Use new and more accurate include
information.
* semantic/scope.el (semantic-calculate-scope): Return a clone of
the scopecache, so that everyone is working with its own (shallow)
copy. Otherwise, if one caller is resetting the scope, it would
be reset for all others working with the scope cache as well.
2013-12-12 22:33:06 +01:00
|
|
|
| symbol
|
2011-07-29 22:06:43 -04:00
|
|
|
;; Klaus Berndl: C/C++ allows sequences of strings which are
|
|
|
|
;; concatenated by the precompiler to one string
|
|
|
|
| string-seq
|
|
|
|
| type-cast expression ;; A cast to some other type
|
|
|
|
;; Casting the results of one expression to something else.
|
|
|
|
| semantic-list expression
|
|
|
|
| semantic-list
|
|
|
|
| expr-start expression
|
|
|
|
;
|
|
|
|
|
2011-07-30 17:18:40 -04:00
|
|
|
;;; c.by ends here
|