emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] scratch/merge-cedet-tests f580185 118/316: Expand preproce


From: Edward John Steere
Subject: [Emacs-diffs] scratch/merge-cedet-tests f580185 118/316: Expand preprocessor to handle macros which open or close scope.
Date: Sat, 28 Jan 2017 09:09:53 +0000 (UTC)

branch: scratch/merge-cedet-tests
commit f5801857e589c52a9a40beaa9f8592203e108420
Author: David Engster <address@hidden>
Commit: Edward John Steere <address@hidden>

    Expand preprocessor to handle macros which open or close scope.
    
    * 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.
    
    * bovine/c.el (semantic-cpp-lexer): Use new
    `semantic-lex-spp-paren-or-list'.
    
    * tests/cedet/semantic/test/manual/cedet/testsppreplace.c:
    * tests/cedet/semantic/test/manual/cedet/testsppreplaced.c: Add tests for 
the
    above.
---
 .../cedet/cedet/semantic/tests/testsppreplace.c    |   27 ++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/test/manual/cedet/cedet/semantic/tests/testsppreplace.c 
b/test/manual/cedet/cedet/semantic/tests/testsppreplace.c
index ae04d07..4e945c4 100644
--- a/test/manual/cedet/cedet/semantic/tests/testsppreplace.c
+++ b/test/manual/cedet/cedet/semantic/tests/testsppreplace.c
@@ -149,6 +149,33 @@ int
 OBJ(test)     /* expands to ABtest */
   ;
 
+
+/* TEST: Macros which open a scope which is closed by another macro */
+/* Simple: */
+#define OPEN_NS namespace foo {
+/* Less simple: */
+#define OPEN_NS_TWICE namespace foo { namespace bar {
+/* Really bad: */
+#define OPEN_NS_ARGS(a,b) namespace a { \
+                            namespace b {
+/* Closing macros: */
+#define END_NS }
+#define END_NS_TWICE } }
+
+OPEN_NS
+struct inside_foo {};
+struct inside_foo_as_well {};
+END_NS
+
+OPEN_NS_TWICE
+struct inside_foo_bar {};
+END_NS_TWICE
+
+OPEN_NS_ARGS(one, two)
+struct inside_one_two ();
+END_NS_TWICE
+
+
 /* TEST: Macro Recursion limits in arguments to a macro.
  * This code is from ALSA (with names changed to moose), noticed by Yupeng. */
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]