X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2FSDCC.lex;h=a400a6f0ca928ae6391203ce377e48d1965b5cf2;hb=ce1204f6b78f5ae59099a288bd60207106e11c20;hp=425508adf254f00083980e12c0973535eb8ab641;hpb=a62cfb0ac108a1237bf0a65bf33e0c1969c9ef72;p=fw%2Fsdcc diff --git a/src/SDCC.lex b/src/SDCC.lex index 425508ad..a400a6f0 100644 --- a/src/SDCC.lex +++ b/src/SDCC.lex @@ -41,7 +41,6 @@ char *currFname; extern int lineno, column; extern char *filename ; -extern char *fullSrcFileName ; int yylineno = 1 ; void count() ; int process_pragma(char *); @@ -76,7 +75,10 @@ struct options save_options ; P_NOGCSE , P_CALLEE_SAVES, P_EXCLUDE , - P_LOOPREV + P_NOIV , + P_LOOPREV , + P_OVERLAY_ /* I had a strange conflict with P_OVERLAY while */ + /* cross-compiling for MINGW32 with gcc 3.2 */ }; %} @@ -84,14 +86,14 @@ struct options save_options ; %% "_asm" { count(); - asmp = asmbuff = Safe_realloc (asmbuff, INITIAL_INLINEASM); + asmp = asmbuff = realloc (asmbuff, INITIAL_INLINEASM); asmbuffSize=INITIAL_INLINEASM; BEGIN(asm) ; } "_endasm" { count(); *asmp = '\0'; - yylval.yyinline = Safe_calloc (1, strlen(asmbuff)+1); + yylval.yyinline = malloc (strlen(asmbuff)+1); strcpy(yylval.yyinline,asmbuff); BEGIN(INITIAL); return (INLINEASM); @@ -101,7 +103,7 @@ struct options save_options ; // increase the buffersize with 50% int size=asmp-asmbuff; asmbuffSize=asmbuffSize*3/2; - asmbuff = Safe_realloc (asmbuff, asmbuffSize); + asmbuff = realloc (asmbuff, asmbuffSize); asmp=asmbuff+size; } *asmp++ = yytext[0]; @@ -112,7 +114,7 @@ struct options save_options ; // increase the buffersize with 50% int size=asmp-asmbuff; asmbuffSize=asmbuffSize*3/2; - asmbuff = Safe_realloc (asmbuff, asmbuffSize); + asmbuff = realloc (asmbuff, asmbuffSize); asmp=asmbuff+size; } *asmp++ = '\n' ; @@ -170,22 +172,15 @@ struct options save_options ; "_naked" { count(); TKEYWORD(NAKED); } "while" { count(); return(WHILE); } "xdata" { count(); TKEYWORD(XDATA); } -"_data" { count(); TKEYWORD(_NEAR); } -"_code" { count(); TKEYWORD(_CODE); } -"_eeprom" { count(); TKEYWORD(_EEPROM); } -"_flash" { count(); TKEYWORD(_CODE); } -"_generic" { count(); TKEYWORD(_GENERIC); } -"_near" { count(); TKEYWORD(_NEAR); } -"_sram" { count(); TKEYWORD(_XDATA);} -"_xdata" { count(); TKEYWORD(_XDATA);} -"_pdata" { count(); TKEYWORD(_PDATA); } -"_idata" { count(); TKEYWORD(_IDATA); } "..." { count(); return(VAR_ARGS);} +"__typeof" { count(); return TYPEOF;} +"_JavaNative" { count(); TKEYWORD(JAVANATIVE);} +"_overlay" { count(); TKEYWORD(OVERLAY);} {L}({L}|{D})* { count(); return(check_type()); } 0[xX]{H}+{IS}? { count(); yylval.val = constVal(yytext); return(CONSTANT); } 0{D}+{IS}? { count(); yylval.val = constVal(yytext); return(CONSTANT); } {D}+{IS}? { count(); yylval.val = constVal(yytext); return(CONSTANT); } -'(\\.|[^\\'])+' { count();yylval.val = charVal (yytext); return(CONSTANT); } +'(\\.|[^\\'])+' { count();yylval.val = charVal (yytext); return(CONSTANT); /* ' make syntax highliter happy */} {D}+{E}{FS}? { count(); yylval.val = constFloatVal(yytext);return(CONSTANT); } {D}*"."{D}+({E})?{FS}? { count(); yylval.val = constFloatVal(yytext);return(CONSTANT); } {D}+"."{D}*({E})?{FS}? { count(); yylval.val = constFloatVal(yytext);return(CONSTANT); } @@ -253,7 +248,7 @@ struct options save_options ; } . { count() ; } %% - + int checkCurrFile ( char *s) { char lineNum[10] ; @@ -290,7 +285,9 @@ int checkCurrFile ( char *s) /* get the currentfile name info */ s++ ; - if ( strncmp(s,fullSrcFileName,strlen(fullSrcFileName)) == 0) { + /* in c1mode fullSrcFileName is NULL */ + if ( fullSrcFileName && + strncmp(s,fullSrcFileName,strlen(fullSrcFileName)) == 0) { lineno = yylineno = lNum; currFname = fullSrcFileName ; } else { @@ -298,7 +295,7 @@ int checkCurrFile ( char *s) /* mark the end of the filename */ while (*s != '"') s++; *s = '\0'; - currFname = Safe_calloc(1,strlen(sb)+1); + currFname = malloc (strlen(sb)+1); strcpy(currFname,sb); lineno = yylineno = lNum; } @@ -457,15 +454,20 @@ void doPragma (int op, char *cp) /* append to the functions already listed in callee-saves */ for (; options.calleeSaves[i] ;i++); - parseWithComma(&options.calleeSaves[i],strdup(cp)); + parseWithComma(&options.calleeSaves[i], Safe_strdup(cp)); } break; case P_EXCLUDE: - parseWithComma(options.excludeRegs,strdup(cp)); + parseWithComma(options.excludeRegs, Safe_strdup(cp)); + break; + case P_NOIV: + options.noiv = 1; break; case P_LOOPREV: optimize.noLoopReverse = 1; break; + case P_OVERLAY_: + break; /* notyet */ } } @@ -546,8 +548,13 @@ int process_pragma(char *s) return 0; } + if (strncmp(cp,PRAGMA_NOIV,strlen(PRAGMA_NOIV)) == 0) { + doPragma(P_NOIV,cp+strlen(PRAGMA_NOIV)); + return 0; + } + if (strncmp(cp,PRAGMA_NOLOOPREV,strlen(PRAGMA_NOLOOPREV)) == 0) { - doPragma(P_EXCLUDE,NULL); + doPragma(P_LOOPREV,NULL); return 0; } @@ -577,10 +584,13 @@ int yyerror(char *s) { fflush(stdout); - if (yylineno && filename) - fprintf(stdout,"\n%s(%d) %s: token -> '%s' ; column %d\n", - filename,yylineno, - s,yytext,column); - fatalError++; + if (yylineno && filename) { + fprintf(stdout,"\n%s:%d: %s: token -> '%s' ; column %d\n", + filename,yylineno, + s,yytext,column); + fatalError++; + } else { + // this comes from an empy file, no problem + } return 0; }