Hi ports@

ctags with "#84 C++11 new using semantics" patch from
https://sourceforge.net/p/ctags/patches/84/

Kind regards,

Rafael

Index: Makefile
===================================================================
RCS file: /cvs/ports/devel/ectags/Makefile,v
retrieving revision 1.16
diff -u -p -u -p -r1.16 Makefile
--- Makefile    6 Apr 2015 22:10:56 -0000       1.16
+++ Makefile    2 Jul 2016 17:31:22 -0000
@@ -3,6 +3,7 @@
 COMMENT=       multilanguage implementation of ctags
 
 DISTNAME=      ctags-5.8
+REVISION=      0
 PKGNAME=       e${DISTNAME}
 CATEGORIES=    devel
 HOMEPAGE=      http://ctags.sourceforge.net/
Index: patches/patch-c_c
===================================================================
RCS file: patches/patch-c_c
diff -N patches/patch-c_c
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-c_c   2 Jul 2016 17:31:22 -0000
@@ -0,0 +1,56 @@
+$OpenBSD$
+
+adding support for this new C++11 syntax:
+using <Type> = <type definition>;
+
+https://sourceforge.net/p/ctags/patches/84/
+
+--- c.c.orig   Sun Jul  5 06:02:43 2009
++++ c.c        Sat Jul  2 19:29:15 2016
+@@ -130,6 +130,7 @@ typedef enum eTagScope {
+       SCOPE_EXTERN,        /* external storage class */
+       SCOPE_FRIEND,        /* declares access only */
+       SCOPE_TYPEDEF,       /* scoping depends upon context */
++      SCOPE_USING,         /* scoping depends upon context */
+       SCOPE_COUNT
+ } tagScope;
+ 
+@@ -1220,6 +1221,8 @@ static void qualifyFunctionDeclTag (const statementInf
+               qualifyFunctionTag (st, nameToken);
+       else if (st->scope == SCOPE_TYPEDEF)
+               makeTag (nameToken, st, TRUE, TAG_TYPEDEF);
++      else if (st->scope == SCOPE_USING && st->assignment)
++              makeTag (nameToken, st, TRUE, TAG_TYPEDEF);
+       else if (isValidTypeSpecifier (st->declaration) && ! isLanguage 
(Lang_csharp))
+               makeTag (nameToken, st, TRUE, TAG_PROTOTYPE);
+ }
+@@ -1269,6 +1272,8 @@ static void qualifyVariableTag (const statementInfo *c
+               ;
+       else if (st->scope == SCOPE_TYPEDEF)
+               makeTag (nameToken, st, TRUE, TAG_TYPEDEF);
++      else if (st->scope == SCOPE_USING && st->assignment)
++              makeTag (nameToken, st, TRUE, TAG_TYPEDEF);
+       else if (st->declaration == DECL_EVENT)
+               makeTag (nameToken, st, (boolean) (st->member.access == 
ACCESS_PRIVATE),
+                               TAG_EVENT);
+@@ -1757,7 +1762,10 @@ static void processToken (tokenInfo *const token, stat
+               case KEYWORD_THROWS:    discardTypeList (token);                
break;
+               case KEYWORD_UNION:     st->declaration = DECL_UNION;           
break;
+               case KEYWORD_UNSIGNED:  st->declaration = DECL_BASE;            
break;
+-              case KEYWORD_USING:     skipStatement (st);                     
break;
++              case KEYWORD_USING:
++                      reinitStatement (st, FALSE);
++                      st->scope = SCOPE_USING;
++                      break;
+               case KEYWORD_VOID:      st->declaration = DECL_BASE;            
break;
+               case KEYWORD_VOLATILE:  st->declaration = DECL_BASE;            
break;
+               case KEYWORD_VIRTUAL:   st->implementation = IMP_VIRTUAL;       
break;
+@@ -2323,7 +2331,7 @@ static void analyzeParens (statementInfo *const st)
+                       st->gotArgs = TRUE;
+                       setToken (st, TOKEN_ARGS);
+                       advanceToken (st);
+-                      if (st->scope != SCOPE_TYPEDEF)
++                      if (st->scope != SCOPE_TYPEDEF && st->scope != 
SCOPE_USING)
+                               analyzePostParens (st, &info);
+               }
+               else

Reply via email to