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.