]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix parsing of default values and display them in default formatter
authorDavid Engster <dengste@eml.cc>
Fri, 20 Sep 2013 19:54:31 +0000 (21:54 +0200)
committerEdward John Steere <edward.steere@gmail.com>
Wed, 25 Jan 2017 16:30:13 +0000 (18:30 +0200)
* semantic/bovine/c.by (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.

* semantic/format.el (semantic-format-tag-prototype-default):
  Display default values if available.

* semantic/test/manual/cedet/test-fmt.cpp: Add default values.

Parsing of default values for variables and function arguments was
broken with the refactoring done in rev. 7622.  While fixing this, it
turned out that our parser for expressions like

  char *foo = NULL;

was too greedy and also covered the semicolon because of empty matches
in rules 'opt-stuff-after-symbol' and 'opt-template-specifier',
leading to a variable with a default-value of "NULL;". This was fixed
by removing the empty match in 'opt-stuff-after-symbol' and using
'symbol' instead of 'namespace-symbol'.

test/manual/cedet/cedet/semantic/tests/test-fmt.cpp [new file with mode: 0644]

diff --git a/test/manual/cedet/cedet/semantic/tests/test-fmt.cpp b/test/manual/cedet/cedet/semantic/tests/test-fmt.cpp
new file mode 100644 (file)
index 0000000..c907736
--- /dev/null
@@ -0,0 +1,107 @@
+/** test-fmt.cpp --- Signatures, and format answers for testing
+ *
+ * Copyright (C) 2012, 2016 Eric M. Ludlam
+ *
+ * Author: Eric M. Ludlam <eric@siege-engine.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/*
+ * About semantic-fmt-utest :
+ *
+ * These tests validate two features:
+ * 1) The C++ parser can parse the different signatures
+ * 2) The semantic-tag-format-* functions can recreate them.
+ *
+ */
+
+void basic_fcn() { }
+/*
+ * ## name "basic_fcn"
+ * ## abbreviate "basic_fcn()"
+ * ## prototype "void basic_fcn ()"
+ * ## uml-prototype "basic_fcn () : void"
+ */
+
+int twoargs_fcn(int a, char b) { }
+/*
+ * ## name "twoargs_fcn"
+ * ## abbreviate "twoargs_fcn()"
+ * ## prototype "int twoargs_fcn (int a,char b)"
+ * ## uml-prototype "twoargs_fcn (a : int,b : char) : int"
+ */
+
+struct moose {
+  int field1;
+  char field2;
+};
+/*
+ * ## name "moose"
+ * ## abbreviate "moose{}"
+ * ## prototype "struct moose {}"
+ * ## uml-prototype "moose{} : struct"
+ */
+
+struct moose strct_fcn ( struct moose in, char *out);
+/*
+ * ## name "strct_fcn"
+ * ## abbreviate "strct_fcn()"
+ * ## prototype "struct moose strct_fcn (struct moose in,char* out)"
+ * ## uml-prototype "strct_fcn (in : struct moose,out : char*) : struct moose"
+ */
+
+struct moose *var_one = NULL;
+/*
+ * ## name "var_one"
+ * ## summarize "Variables: struct moose* var_one[=NULL]"
+ * ## prototype "struct moose* var_one[=NULL]"
+ * ## uml-prototype "var_one : struct moose*"
+ */
+
+const int var_two = 1;
+/*
+ * ## name "var_two"
+ * ## summarize "Variables: const int var_two[=1]"
+ * ## prototype "const int var_two[=1]"
+ * ## uml-prototype "var_two : int"
+ */
+
+namespace NS {
+  enum TestEnum {a,b};
+}
+/*
+ * ## name "NS"
+ * ## summarize "Types: namespace NS {}"
+ * ## prototype "namespace NS {}"
+ * ## uml-prototype "NS{} : namespace"
+ */
+
+void func_ns_arg(NS::TestEnum v = NS::a);
+/*
+ * ## name "func_ns_arg"
+ * ## summarize "Functions: void func_ns_arg (NS::TestEnum v[=NS::a])"
+ * ## prototype "void func_ns_arg (NS::TestEnum v[=NS::a])"
+ * ## uml-prototype "func_ns_arg (v : NS::TestEnum) : void"
+ */
+
+//int const var_three = 1;
+/*
+ * # # name "var_three"
+ * # # summarize "Variables: int const var_three"  <-- this fails
+ * # # prototype "int const var_three"        <-- this fails
+ * # # uml-prototype "var_three : int"
+ */