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