SF.net SVN: geany:[4406] trunk

ntrel at users.sourceforge.net ntrel at xxxxx
Fri Nov 6 13:03:28 UTC 2009


Revision: 4406
          http://geany.svn.sourceforge.net/geany/?rev=4406&view=rev
Author:   ntrel
Date:     2009-11-06 13:03:28 +0000 (Fri, 06 Nov 2009)

Log Message:
-----------
Parse D functions with contracts (fixes #1885480).
Parse D alias statement like typedef.
(Ignore some more D keywords).

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/tagmanager/c.c

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2009-11-05 21:16:40 UTC (rev 4405)
+++ trunk/ChangeLog	2009-11-06 13:03:28 UTC (rev 4406)
@@ -1,3 +1,11 @@
+2009-11-06  Nick Treleaven  <nick(dot)treleaven(at)btinternet(dot)com>
+
+ * tagmanager/c.c:
+   Parse D functions with contracts (fixes #1885480).
+   Parse D alias statement like typedef.
+   (Ignore some more D keywords).
+
+
 2009-11-05  Enrico Tröger  <enrico(dot)troeger(at)uvena(dot)de>
 
  * src/main.c:

Modified: trunk/tagmanager/c.c
===================================================================
--- trunk/tagmanager/c.c	2009-11-05 21:16:40 UTC (rev 4405)
+++ trunk/tagmanager/c.c	2009-11-06 13:03:28 UTC (rev 4406)
@@ -58,9 +58,9 @@
 typedef enum eKeywordId
 {
 	KEYWORD_NONE = -1,
-	KEYWORD_ATTRIBUTE, KEYWORD_ABSTRACT,
+	KEYWORD_ATTRIBUTE, KEYWORD_ABSTRACT, KEYWORD_ALIAS,
 	KEYWORD_BOOLEAN, KEYWORD_BYTE, KEYWORD_BAD_STATE, KEYWORD_BAD_TRANS,
-	KEYWORD_BIND, KEYWORD_BIND_VAR, KEYWORD_BIT,
+	KEYWORD_BIND, KEYWORD_BIND_VAR, KEYWORD_BIT, KEYWORD_BODY,
 	KEYWORD_CASE, KEYWORD_CATCH, KEYWORD_CHAR, KEYWORD_CLASS, KEYWORD_CONST,
 	KEYWORD_CONSTRAINT, KEYWORD_COVERAGE_BLOCK, KEYWORD_COVERAGE_DEF,
 	KEYWORD_DEFAULT, KEYWORD_DELEGATE, KEYWORD_DELETE, KEYWORD_DO,
@@ -69,7 +69,7 @@
 	KEYWORD_EXTENDS, KEYWORD_EVENT,
 	KEYWORD_FINAL, KEYWORD_FINALLY, KEYWORD_FLOAT, KEYWORD_FOR, KEYWORD_FRIEND, KEYWORD_FUNCTION,
 	KEYWORD_GET, KEYWORD_GOTO,
-	KEYWORD_IF, KEYWORD_IMPLEMENTS, KEYWORD_IMPORT, KEYWORD_INLINE, KEYWORD_INT,
+	KEYWORD_IF, KEYWORD_IMPLEMENTS, KEYWORD_IMPORT, KEYWORD_IN, KEYWORD_INLINE, KEYWORD_INT,
 	KEYWORD_INOUT, KEYWORD_INPUT, KEYWORD_INTEGER, KEYWORD_INTERFACE,
 	KEYWORD_INTERNAL,
 	KEYWORD_LOCAL, KEYWORD_LONG,
@@ -365,13 +365,15 @@
 	/* keyword          keyword ID                |  |  |  |  |  |  |    */
 	{ "__attribute__",  KEYWORD_ATTRIBUTE,      { 1, 1, 1, 0, 0, 0, 1 } },
 	{ "abstract",       KEYWORD_ABSTRACT,       { 0, 0, 1, 1, 0, 1, 1 } },
+	{ "alias",          KEYWORD_TYPEDEF,        { 0, 0, 0, 0, 0, 0, 1 } }, /* handle like typedef */
 	{ "bad_state",      KEYWORD_BAD_STATE,      { 0, 0, 0, 0, 1, 0, 0 } },
 	{ "bad_trans",      KEYWORD_BAD_TRANS,      { 0, 0, 0, 0, 1, 0, 0 } },
 	{ "bind",           KEYWORD_BIND,           { 0, 0, 0, 0, 1, 0, 0 } },
 	{ "bind_var",       KEYWORD_BIND_VAR,       { 0, 0, 0, 0, 1, 0, 0 } },
 	{ "bit",            KEYWORD_BIT,            { 0, 0, 0, 0, 1, 0, 0 } },
+	{ "body",           KEYWORD_BODY,           { 0, 0, 0, 0, 0, 0, 1 } },
 	{ "boolean",        KEYWORD_BOOLEAN,        { 0, 0, 0, 1, 0, 0, 0 } },
-	{ "byte",           KEYWORD_BYTE,           { 0, 0, 0, 1, 0, 0, 0 } },
+	{ "byte",           KEYWORD_BYTE,           { 0, 0, 0, 1, 0, 0, 1 } },
 	{ "case",           KEYWORD_CASE,           { 1, 1, 1, 1, 0, 1, 1 } },
 	{ "catch",          KEYWORD_CATCH,          { 0, 1, 1, 0, 0, 1, 1 } },
 	{ "char",           KEYWORD_CHAR,           { 1, 1, 1, 1, 0, 1, 1 } },
@@ -392,18 +394,19 @@
 	{ "explicit",       KEYWORD_EXPLICIT,       { 0, 1, 1, 0, 0, 0, 1 } },
 	{ "extends",        KEYWORD_EXTENDS,        { 0, 0, 0, 1, 1, 0, 0 } },
 	{ "extern",         KEYWORD_EXTERN,         { 1, 1, 1, 0, 1, 1, 1 } },
-	{ "final",          KEYWORD_FINAL,          { 0, 0, 0, 1, 0, 0, 0 } },
-	{ "finally",        KEYWORD_FINALLY,        { 0, 0, 0, 0, 0, 1, 0 } },
+	{ "final",          KEYWORD_FINAL,          { 0, 0, 0, 1, 0, 0, 1 } },
+	{ "finally",        KEYWORD_FINALLY,        { 0, 0, 0, 0, 0, 1, 1 } },
 	{ "float",          KEYWORD_FLOAT,          { 1, 1, 1, 1, 0, 1, 1 } },
 	{ "for",            KEYWORD_FOR,            { 1, 1, 1, 1, 0, 1, 1 } },
 	{ "friend",         KEYWORD_FRIEND,         { 0, 1, 0, 0, 0, 0, 0 } },
-	{ "function",       KEYWORD_FUNCTION,       { 0, 0, 0, 0, 1, 0, 0 } },
+	{ "function",       KEYWORD_FUNCTION,       { 0, 0, 0, 0, 1, 0, 1 } },
 	{ "get",            KEYWORD_GET,            { 0, 0, 0, 0, 0, 1, 0 } },
 	{ "goto",           KEYWORD_GOTO,           { 1, 1, 1, 1, 0, 1, 1 } },
 	{ "if",             KEYWORD_IF,             { 1, 1, 1, 1, 0, 1, 1 } },
 	{ "implements",     KEYWORD_IMPLEMENTS,     { 0, 0, 0, 1, 0, 0, 0 } },
 	{ "import",         KEYWORD_IMPORT,         { 0, 0, 0, 1, 0, 0, 1 } },
 	{ "inline",         KEYWORD_INLINE,         { 0, 1, 0, 0, 0, 1, 0 } },
+	{ "in",             KEYWORD_IN,             { 0, 0, 0, 0, 0, 0, 1 } },
 	{ "inout",          KEYWORD_INOUT,          { 0, 0, 0, 0, 1, 0, 1 } },
 	{ "input",          KEYWORD_INPUT,          { 0, 0, 0, 0, 1, 0, 0 } },
 	{ "int",            KEYWORD_INT,            { 1, 1, 1, 1, 0, 1, 1 } },
@@ -423,7 +426,7 @@
 	{ "new",            KEYWORD_NEW,            { 0, 1, 1, 1, 0, 1, 1 } },
 	{ "newcov",         KEYWORD_NEWCOV,         { 0, 0, 0, 0, 1, 0, 0 } },
 	{ "operator",       KEYWORD_OPERATOR,       { 0, 1, 1, 0, 0, 0, 0 } },
-	{ "out",            KEYWORD_OUT,            { 0, 0, 0, 0, 0, 1, 0 } },
+	{ "out",            KEYWORD_OUT,            { 0, 0, 0, 0, 0, 1, 1 } },
 	{ "output",         KEYWORD_OUTPUT,         { 0, 0, 0, 0, 1, 0, 0 } },
 	{ "overload",       KEYWORD_OVERLOAD,       { 0, 1, 0, 0, 0, 0, 0 } },
 	{ "override",       KEYWORD_OVERRIDE,       { 0, 0, 1, 0, 0, 1, 1 } },
@@ -434,7 +437,7 @@
 	{ "program",        KEYWORD_PROGRAM,        { 0, 0, 0, 0, 1, 0, 0 } },
 	{ "protected",      KEYWORD_PROTECTED,      { 0, 1, 1, 1, 1, 1, 1 } },
 	{ "public",         KEYWORD_PUBLIC,         { 0, 1, 1, 1, 1, 1, 1 } },
-	{ "ref",            KEYWORD_REF,            { 0, 0, 0, 0, 0, 1, 0 } },
+	{ "ref",            KEYWORD_REF,            { 0, 0, 0, 0, 0, 1, 1 } },
 	{ "register",       KEYWORD_REGISTER,       { 1, 1, 0, 0, 0, 0, 0 } },
 	{ "return",         KEYWORD_RETURN,         { 1, 1, 1, 1, 0, 1, 1 } },
 	{ "set",            KEYWORD_SET,            { 0, 0, 0, 0, 0, 1, 0 } },
@@ -2112,6 +2115,18 @@
 				if (isident1 (c))
 				{
 					readIdentifier (token, c);
+					if (isLanguage(Lang_d))
+					{	/* parse D contracts */
+						switch (token->keyword)
+						{
+							case KEYWORD_IN:
+							case KEYWORD_OUT:
+							case KEYWORD_BODY:
+								token->keyword = KEYWORD_CONST;
+							default:
+								break;
+						}
+					}
 					switch (token->keyword)
 					{
 					case KEYWORD_ATTRIBUTE:	skipParens ();	break;


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the Commits mailing list