SF.net SVN: geany:[5301] trunk

ntrel at users.sourceforge.net ntrel at xxxxx
Mon Oct 18 13:55:22 UTC 2010


Revision: 5301
          http://geany.svn.sourceforge.net/geany/?rev=5301&view=rev
Author:   ntrel
Date:     2010-10-18 13:55:21 +0000 (Mon, 18 Oct 2010)

Log Message:
-----------
Parse Vala functions with contracts (#3080232).

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

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2010-10-18 11:32:33 UTC (rev 5300)
+++ trunk/ChangeLog	2010-10-18 13:55:21 UTC (rev 5301)
@@ -4,6 +4,8 @@
    Add missing C99 keyword 'restrict' (#3046716).
    Add missing D1 keywords 'ref' and 'macro'.
    Add D2 keywords.
+ * tagmanager/c.c:
+   Parse Vala functions with contracts (#3080232).
 
 
 2010-10-16  Enrico Tröger  <enrico(dot)troeger(at)uvena(dot)de>

Modified: trunk/tagmanager/c.c
===================================================================
--- trunk/tagmanager/c.c	2010-10-18 11:32:33 UTC (rev 5300)
+++ trunk/tagmanager/c.c	2010-10-18 13:55:21 UTC (rev 5301)
@@ -415,6 +415,7 @@
 	{ "delete",         KEYWORD_DELETE,         { 0, 1, 0, 0, 0, 1, 1 } },
 	{ "double",         KEYWORD_DOUBLE,         { 1, 1, 1, 1, 0, 1, 1 } },
 	{ "else",           KEYWORD_ELSE,           { 1, 1, 0, 1, 0, 1, 1 } },
+	{ "ensures",        KEYWORD_ATTRIBUTE,      { 0, 0, 0, 0, 0, 1, 0 } },	/* ignore */
 	{ "enum",           KEYWORD_ENUM,           { 1, 1, 1, 1, 1, 1, 1 } },
 	{ "errordomain",    KEYWORD_ENUM,           { 0, 0, 0, 0, 0, 1, 0 } }, /* errordomain behaves like enum */
 	{ "event",          KEYWORD_EVENT,          { 0, 0, 1, 0, 1, 0, 0 } },
@@ -467,6 +468,7 @@
 	{ "public",         KEYWORD_PUBLIC,         { 0, 1, 1, 1, 1, 1, 1 } },
 	{ "ref",            KEYWORD_REF,            { 0, 0, 0, 0, 0, 1, 1 } },
 	{ "register",       KEYWORD_REGISTER,       { 1, 1, 0, 0, 0, 0, 0 } },
+	{ "requires",       KEYWORD_ATTRIBUTE,      { 0, 0, 0, 0, 0, 1, 0 } },	/* ignore */
 	{ "return",         KEYWORD_RETURN,         { 1, 1, 1, 1, 0, 1, 1 } },
 	{ "set",            KEYWORD_SET,            { 0, 0, 0, 0, 0, 1, 0 } },
 	{ "shadow",         KEYWORD_SHADOW,         { 0, 0, 0, 0, 1, 0, 0 } },
@@ -1744,7 +1746,7 @@
 	vStringTerminate (name);
 	cppUngetc (c);		/* unget non-identifier character */
 
-	/* Vala supports '?' at end of a type (with or without whitspace before) for nullable types */
+	/* Vala supports '?' at end of a type (with or without whitespace before) for nullable types */
 	if (isLanguage (Lang_vala))
 	{
 		c = skipToNonWhite ();
@@ -2283,6 +2285,39 @@
 	setToken (st, TOKEN_NONE);
 }
 
+static void skipValaPostParens (statementInfo *const st)
+{
+	tokenInfo *const token = activeToken (st);
+	int c = skipToNonWhite ();
+
+	while (isident1 (c))
+	{
+		readIdentifier (token, c);
+		if (token->keyword == KEYWORD_ATTRIBUTE)
+		{
+			/* parse contracts */
+			skipParens ();
+			c = skipToNonWhite ();
+		}
+		else if (token->keyword == KEYWORD_THROWS)
+		{
+			do
+			{
+				c = skipToNonWhite ();
+				if (isident1 (c))
+				{
+					readIdentifier (token, c);
+					c = skipToNonWhite ();
+				}
+			} while (c == '.'  ||  c == ',');
+		}
+		else
+			break;
+	}
+	cppUngetc (c);
+	setToken (st, TOKEN_NONE);
+}
+
 static void analyzePostParens (statementInfo *const st, parenInfo *const info)
 {
 	const unsigned long inputLineNumber = getInputLineNumber ();
@@ -2291,8 +2326,10 @@
 	cppUngetc (c);
 	if (isOneOf (c, "{;,="))
 		;
-	else if (isLanguage (Lang_java) || isLanguage (Lang_vala))
+	else if (isLanguage (Lang_java))
 		skipJavaThrows (st);
+	else if (isLanguage (Lang_vala))
+		skipValaPostParens(st);
 	else
 	{
 		if (! skipPostArgumentStuff (st, info))


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