X-Git-Url: http://git.draconx.ca/gitweb/gob-dx.git/blobdiff_plain/40647d7b7b7fbeae828e0a032a3c3a5f204cdfa8..774037b15064dcc6e4995c0bba3b24abb1bde35f:/src/lexer.l diff --git a/src/lexer.l b/src/lexer.l index 320e25b..392a636 100644 --- a/src/lexer.l +++ b/src/lexer.l @@ -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|this { if(for_cpp) { char *s; @@ -227,6 +251,7 @@ class { public {yylval.line = line_no; return PUBLIC;} private {yylval.line = line_no; return PRIVATE;} +protected {yylval.line = line_no; return PROTECTED;} argument {yylval.line = line_no; return ARGUMENT;} virtual {yylval.line = line_no; return VIRTUAL;} signal {yylval.line = line_no; return SIGNAL;} @@ -245,6 +270,11 @@ class { return TOKEN; } +(\[[0-9]*\])+ { + yylval.id = g_strdup(yytext); + return ARRAY_DIM; + } + \{ { 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 '{'; } \} {