X-Git-Url: https://git.draconx.ca/gitweb/gob-dx.git/blobdiff_plain/853c670e4b839fd435507201f04d16080590a894..refs/tags/v1.0.9:/src/lexer.c diff --git a/src/lexer.c b/src/lexer.c index fe904e5..7335379 100644 --- a/src/lexer.c +++ b/src/lexer.c @@ -1552,27 +1552,46 @@ YY_RULE_SETUP { int maj = 0,min = 0,pl = 0; int rmaj = 0,rmin = 0,rpl = 0; + int effective_maj = 0; + int effective_rmaj = 0; char *p; sscanf(VERSION,"%d.%d.%d",&rmaj,&rmin,&rpl); + effective_rmaj = rmaj; + if (rmin >= 90) + effective_rmaj = rmaj + 1; + p = strchr(yytext,'r'); g_assert(p); /* we MUST have found it */ sscanf(p,"requires %d.%d.%d",&maj,&min,&pl); + effective_maj = maj; + if (min >= 90) + effective_maj = maj + 1; + if(rmaj < maj || (rmaj == maj && rmin < min) || (rmaj == maj && rmin == min && rpl < pl)) { error_printf(GOB_ERROR, line_no, - "GOB version %d.%d.%d required " + "GOB version at least %d.%d.%d required " "(this is %s)\n" "To upgrade your gob, see: " "http://www.5z.com/jirka/gob.html", maj, min, pl, VERSION); } + + if(effective_rmaj != effective_maj) { + error_printf(GOB_ERROR, line_no, + "GOB major version %d required " + "(this is %s)\n" + "To upgrade your gob, see: " + "http://www.5z.com/jirka/gob.html", + maj, VERSION); + } } YY_BREAK case 53: YY_RULE_SETUP -#line 365 "lexer.l" +#line 384 "lexer.l" { if(for_cpp) { error_printf(GOB_WARN, line_no, @@ -1585,122 +1604,122 @@ YY_RULE_SETUP YY_BREAK case 54: YY_RULE_SETUP -#line 375 "lexer.l" +#line 394 "lexer.l" {return FROM;} YY_BREAK case 55: YY_RULE_SETUP -#line 377 "lexer.l" +#line 396 "lexer.l" {return VOID;} YY_BREAK case 56: YY_RULE_SETUP -#line 378 "lexer.l" +#line 397 "lexer.l" {return STRUCT;} YY_BREAK case 57: YY_RULE_SETUP -#line 379 "lexer.l" +#line 398 "lexer.l" {return UNION;} YY_BREAK case 58: YY_RULE_SETUP -#line 380 "lexer.l" +#line 399 "lexer.l" {return ENUM;} YY_BREAK case 59: YY_RULE_SETUP -#line 381 "lexer.l" +#line 400 "lexer.l" {return SIGNED;} YY_BREAK case 60: YY_RULE_SETUP -#line 382 "lexer.l" +#line 401 "lexer.l" {return UNSIGNED;} YY_BREAK case 61: YY_RULE_SETUP -#line 383 "lexer.l" +#line 402 "lexer.l" {return LONG;} YY_BREAK case 62: YY_RULE_SETUP -#line 384 "lexer.l" +#line 403 "lexer.l" {return SHORT;} YY_BREAK case 63: YY_RULE_SETUP -#line 385 "lexer.l" +#line 404 "lexer.l" {return INT;} YY_BREAK case 64: YY_RULE_SETUP -#line 386 "lexer.l" +#line 405 "lexer.l" {return FLOAT;} YY_BREAK case 65: YY_RULE_SETUP -#line 387 "lexer.l" +#line 406 "lexer.l" {return DOUBLE;} YY_BREAK case 66: YY_RULE_SETUP -#line 388 "lexer.l" +#line 407 "lexer.l" {return CHAR;} YY_BREAK case 67: YY_RULE_SETUP -#line 389 "lexer.l" +#line 408 "lexer.l" {return CONST;} YY_BREAK case 68: YY_RULE_SETUP -#line 391 "lexer.l" +#line 410 "lexer.l" {return THREEDOTS;} YY_BREAK case 69: YY_RULE_SETUP -#line 393 "lexer.l" +#line 412 "lexer.l" {yylval.line = line_no; return PUBLIC;} YY_BREAK case 70: YY_RULE_SETUP -#line 394 "lexer.l" +#line 413 "lexer.l" {yylval.line = line_no; return PRIVATE;} YY_BREAK case 71: YY_RULE_SETUP -#line 395 "lexer.l" +#line 414 "lexer.l" {yylval.line = line_no; return PROTECTED;} YY_BREAK case 72: YY_RULE_SETUP -#line 396 "lexer.l" +#line 415 "lexer.l" {yylval.line = line_no; return CLASSWIDE;} YY_BREAK case 73: YY_RULE_SETUP -#line 397 "lexer.l" +#line 416 "lexer.l" {yylval.line = line_no; return ARGUMENT;} YY_BREAK case 74: YY_RULE_SETUP -#line 398 "lexer.l" +#line 417 "lexer.l" {yylval.line = line_no; return VIRTUAL;} YY_BREAK case 75: YY_RULE_SETUP -#line 399 "lexer.l" +#line 418 "lexer.l" {yylval.line = line_no; return SIGNAL;} YY_BREAK case 76: YY_RULE_SETUP -#line 400 "lexer.l" +#line 419 "lexer.l" {yylval.line = line_no; return OVERRIDE;} YY_BREAK case 77: YY_RULE_SETUP -#line 401 "lexer.l" +#line 420 "lexer.l" { yylval.id = g_strdup(yytext); return NUMBER; @@ -1708,7 +1727,7 @@ YY_RULE_SETUP YY_BREAK case 78: YY_RULE_SETUP -#line 405 "lexer.l" +#line 424 "lexer.l" { /* this one is for a classname with a namespace */ yylval.id = g_strdup(yytext); @@ -1717,7 +1736,7 @@ YY_RULE_SETUP YY_BREAK case 79: YY_RULE_SETUP -#line 410 "lexer.l" +#line 429 "lexer.l" { /* this is for a classname with an empty namespace */ yylval.id = g_strdup(yytext); @@ -1726,7 +1745,7 @@ YY_RULE_SETUP YY_BREAK case 80: YY_RULE_SETUP -#line 415 "lexer.l" +#line 434 "lexer.l" { yylval.id = g_strdup(yytext); return TOKEN; @@ -1734,7 +1753,7 @@ YY_RULE_SETUP YY_BREAK case 81: YY_RULE_SETUP -#line 420 "lexer.l" +#line 439 "lexer.l" { yylval.id = g_strdup(yytext); return ARRAY_DIM; @@ -1742,7 +1761,7 @@ YY_RULE_SETUP YY_BREAK case 82: YY_RULE_SETUP -#line 425 "lexer.l" +#line 444 "lexer.l" { BEGIN(CLASS_CODE_I); return '{'; @@ -1750,7 +1769,7 @@ YY_RULE_SETUP YY_BREAK case 83: YY_RULE_SETUP -#line 429 "lexer.l" +#line 448 "lexer.l" { BEGIN(C_CODE); parenth_depth=1; @@ -1763,7 +1782,7 @@ YY_RULE_SETUP YY_BREAK case 84: YY_RULE_SETUP -#line 438 "lexer.l" +#line 457 "lexer.l" { BEGIN(INITIAL); return '}'; @@ -1771,12 +1790,12 @@ YY_RULE_SETUP YY_BREAK case 85: YY_RULE_SETUP -#line 443 "lexer.l" +#line 462 "lexer.l" ; /*ignore*/ YY_BREAK case 86: YY_RULE_SETUP -#line 445 "lexer.l" +#line 464 "lexer.l" { yylval.line = line_no; return yytext[0]; @@ -1784,15 +1803,15 @@ YY_RULE_SETUP YY_BREAK case 87: YY_RULE_SETUP -#line 450 "lexer.l" +#line 469 "lexer.l" ; /*ignore*/ YY_BREAK case 88: YY_RULE_SETUP -#line 452 "lexer.l" +#line 471 "lexer.l" ECHO; YY_BREAK -#line 1796 "lex.yy.c" +#line 1815 "lex.yy.c" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(COMMENT): case YY_STATE_EOF(C_CODE): @@ -2682,7 +2701,7 @@ int main() return 0; } #endif -#line 452 "lexer.l" +#line 471 "lexer.l" /* Ugly warning avoiding */