]> git.draconx.ca Git - gob-dx.git/blobdiff - src/lexer.l
Release 0.92.1
[gob-dx.git] / src / lexer.l
index 320e25b51f4cae6273d4b294affb7367ed170d18..392a6364aad9fe21548648fc56e3beea115a2eb8 100644 (file)
@@ -195,6 +195,30 @@ class              {
                        return CLASS;
                }
 
+^[ \t]*requires[ \t]+[0-9]+\.[0-9]+\.[0-9]+[\t ]*$     {
+                       int maj = 0,min = 0,pl = 0;
+                       int rmaj = 0,rmin = 0,rpl = 0;
+                       char *p;
+                       
+                       sscanf(VERSION,"%d.%d.%d",&rmaj,&rmin,&rpl);
+                       p = strchr(yytext,'r');
+                       g_assert(p); /* we MUST have found it */
+                       sscanf(p,"requires %d.%d.%d",&maj,&min,&pl);
+                       if(rmaj < maj ||
+                          (rmaj == maj && rmin < min) ||
+                          (rmaj == maj && rmin == min && rpl < pl)) {
+                               char *s;
+                               s = g_strdup_printf(
+                                   "GOB version %d.%d.%d required "
+                                   "(this is %s)\n"
+                                   "To upgrade your gob, see: "
+                                   "http://www.5z.com/jirka/gob.html",
+                                   maj,min,pl,VERSION);
+                               print_error(FALSE,s, line_no);
+                               g_free(s);
+                       }
+               }
+
 <CLASS_CODE,CLASS_CODE_I>class|this    {
                        if(for_cpp) {
                                char *s;
@@ -227,6 +251,7 @@ class               {
 
 <CLASS_CODE_I>public   {yylval.line = line_no; return PUBLIC;}
 <CLASS_CODE_I>private  {yylval.line = line_no; return PRIVATE;}
+<CLASS_CODE_I>protected        {yylval.line = line_no; return PROTECTED;}
 <CLASS_CODE_I>argument {yylval.line = line_no; return ARGUMENT;}
 <CLASS_CODE_I>virtual  {yylval.line = line_no; return VIRTUAL;}
 <CLASS_CODE_I>signal   {yylval.line = line_no; return SIGNAL;}
@@ -245,6 +270,11 @@ class              {
                        return TOKEN;
                }
 
+<CLASS_CODE_I>(\[[0-9]*\])+    {
+                       yylval.id = g_strdup(yytext);
+                       return ARRAY_DIM;
+               }
+
 <CLASS_CODE>\{ {
                        BEGIN(CLASS_CODE_I);
                        return '{';
@@ -253,8 +283,9 @@ class               {
                        BEGIN(C_CODE);
                        parenth_depth=1;
                        class_after_c = TRUE;
-                       ccode_line = line_no;
                        yylval.line = line_no;
+                       clear_cbuf();
+                       ccode_line = line_no;
                        return '{';
                }
 <CLASS_CODE_I>\}       {