support nested generic types, fixes bug 443522
authorJuerg Billeter <j@bitron.ch>
Fri, 18 Jan 2008 22:00:34 +0000 (22:00 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Fri, 18 Jan 2008 22:00:34 +0000 (22:00 +0000)
2008-01-18  Juerg Billeter  <j@bitron.ch>

* vala/scanner.l: support nested generic types, fixes bug 443522

svn path=/trunk/; revision=859

ChangeLog
vala/scanner.l

index 7d555fa..474073d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2008-01-18  Jürg Billeter  <j@bitron.ch>
 
+       * vala/scanner.l: support nested generic types, fixes bug 443522
+
+2008-01-18  Jürg Billeter  <j@bitron.ch>
+
        * vala/valavoidtype.vala: implement get_cname method
 
        * gobject/valaccodegenerator.vala: cast function pointers to callback
index de804da..a38a57b 100644 (file)
@@ -63,6 +63,9 @@ string_literal                        \"{string_literal_character}*\"
 integer_literal                        ({decimal_integer_literal}|{hexadecimal_integer_literal}|{octal_integer_literal}){integer_suffix}?
 literal                                ({integer_literal}|{real_literal}|{character_literal}|{string_literal})
 
+type_name                      ("weak"{space})?({ident}".")?{ident}
+generic_type                   {type_name}("<"{space}{type_name}("?"|"*"+)?(","{space}{type_name}("?"|"*"+)?)*">")?("?"|"*"+)?
+
 %%
 
 "/*"                           { uploc; file_comment = (yylineno == 1); BEGIN (IN_COMMENT); }
@@ -110,7 +113,7 @@ literal                             ({integer_literal}|{real_literal}|{character_literal}|{string_literal
 "<="           { uploc; return OP_LE; }
 ">="           { uploc; return OP_GE; }
 "=>"           { uploc; return LAMBDA; }
-"<"{space}("weak"{space})?({ident}".")?{ident}("?"|"*"+)?("[]""?"?)?(","{space}("weak"{space})?({ident}".")?{ident}("?"|"*"+)?("[]""?"?)?)*">" { yyless (1); uploc; return GENERIC_LT; }
+"<"{space}{generic_type}{space}(","{space}{generic_type}{space})*">"   { yyless (1); uploc; return GENERIC_LT; }
 "<"            { uploc; return OP_LT; }
 ">"            { uploc; return OP_GT; }
 "!"            { uploc; return OP_NEG; }