]> git.eshelyaron.com Git - emacs.git/commitdiff
C/C++: Fix function pointer parsing
authorDavid Engster <dengste@eml.cc>
Sat, 19 Oct 2013 11:35:06 +0000 (13:35 +0200)
committerEdward John Steere <edward.steere@gmail.com>
Wed, 25 Jan 2017 15:59:25 +0000 (17:59 +0200)
* semantic/bovine/c.by (variablearg-opt-name): Support parsing of
  function pointers inside an argument list.

* semantic/bovine/c.el (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'.

* tests/cedet/semantic/test/manual/cedet/testsppreplace.c:
* tests/cedet/semantic/test/manual/cedet/testsppreplaced.c: Disable
  test which now breaks due to improved function pointer parsing.
  This test is broken anyway, since it just succeeded because the
  argument list was not parsed at all before this commit.  The
  underlying bug was always present in the semantic preprocessor.  ---
  tests/cedet/semantic/test/manual/cedet/testsppreplace.c | 8 ++++++++
  1 file changed, 8 insertions(+)

test/manual/cedet/cedet/semantic/tests/testsppreplace.c

index 757a53cfb97f32001e75f1a594eb74a8e9d5f8c2..ae04d079ca279ead19ab033d50fa1ee01aab17af 100644 (file)
@@ -151,11 +151,19 @@ OBJ(test)     /* expands to ABtest */
 
 /* TEST: Macro Recursion limits in arguments to a macro.
  * This code is from ALSA (with names changed to moose), noticed by Yupeng. */
+
+/* David Engster:
+   This test is broken. The problem is not an infinite recursion, but that
+   the mr_moose macro shouldn't be applied when there are no arguments.
+   That this test succeeded was simply a bug in the function pointer
+   parser.
+
 #define mr_moose(n) list_entry(n, struct mr_moose, list)
 
 struct mr_moose_ops {
   int (*mr_moose_disconnect)(struct mr_moose *dev);
 };
 
+*/
 
 /* END */