X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2FSDCC.lex;h=02876dd012436c56680afbb6f16f86cdbc2f6cfd;hb=11a6f7ab973ae89dea076e9978200fae5c8b1e87;hp=b4c5cfb464f213302beb24a0fc9b49f78572a4b7;hpb=442d53dd12fba68e87c9afbd5a1aaa3252977a9f;p=fw%2Fsdcc diff --git a/src/SDCC.lex b/src/SDCC.lex index b4c5cfb4..02876dd0 100644 --- a/src/SDCC.lex +++ b/src/SDCC.lex @@ -44,7 +44,6 @@ extern char *filename ; extern char *fullSrcFileName ; int yylineno = 1 ; void count() ; -void comment(); int process_pragma(char *); #undef yywrap @@ -85,14 +84,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); @@ -102,7 +101,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]; @@ -113,12 +112,11 @@ 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' ; } -"/*" { comment(); } "at" { count(); TKEYWORD(AT) ; } "auto" { count(); return(AUTO); } "bit" { count(); TKEYWORD(BIT) ; } @@ -172,22 +170,12 @@ 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);} {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); } @@ -248,13 +236,14 @@ struct options save_options ; \\ { char ch=input(); if (ch!='\n') { + // that could have been removed by the preprocessor anyway werror (W_STRAY_BACKSLASH, column); unput(ch); } } . { count() ; } %% - + int checkCurrFile ( char *s) { char lineNum[10] ; @@ -282,8 +271,8 @@ int checkCurrFile ( char *s) /* set the current line number to */ /* line number if printFlag is on */ if (!*s) { - yylineno = lNum ; - return 0; + lineno = yylineno = lNum ; + return 0; } /* if we have a filename then check */ @@ -292,40 +281,21 @@ int checkCurrFile ( char *s) s++ ; if ( strncmp(s,fullSrcFileName,strlen(fullSrcFileName)) == 0) { - yylineno = lNum - 2; - currFname = fullSrcFileName ; + lineno = yylineno = lNum; + currFname = fullSrcFileName ; } else { char *sb = 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); - yylineno = lNum - 2; + lineno = yylineno = lNum; } filename = currFname ; return 0; } -void comment() -{ - char c, c1; - - loop: - while ((c = input()) != '*' && c) { - if ( c == '\n') { - lineno=++yylineno; - } - } - - if (c && (c1 = input()) != '/') { - unput(c1); - goto loop; - } -} - - - int column = 0; int plineIdx=0; @@ -382,13 +352,10 @@ char *stringLiteral () { /* if it is a \ then escape char's are allowed */ if (ch == '\\') { ch=input(); - if (ch=='\r') { - // input() translates \n into \r\n - if ((ch=input())!='\n') { - unput (ch); - } + if (ch=='\n') { /* \ is a continuator */ lineno=++yylineno; + column=0; continue; } *str++ = '\\'; /* backslash in place */ @@ -397,14 +364,11 @@ char *stringLiteral () { } /* if new line we have a new line break, which is illegal */ - if (ch == '\r') { - // input() translates \n into \r\n - if ((ch=input())!='\n') { - unput (ch); - } + if (ch == '\n') { werror (W_NEWLINE_IN_STRING); *str++ = '\n'; lineno=++yylineno; + column=0; continue; } @@ -416,6 +380,13 @@ char *stringLiteral () { while ((ch = input()) && (isspace(ch) || ch=='\\')) { switch (ch) { case '\\': + if ((ch=input())!='\n') { + werror (W_STRAY_BACKSLASH, column); + unput(ch); + } else { + lineno=++yylineno; + column=0; + } break; case '\n': yylineno++; @@ -425,7 +396,7 @@ char *stringLiteral () { if (!ch) break; - + if (ch != '\"') { unput(ch) ; break ; @@ -476,11 +447,11 @@ 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_LOOPREV: optimize.noLoopReverse = 1; @@ -566,7 +537,7 @@ int process_pragma(char *s) } if (strncmp(cp,PRAGMA_NOLOOPREV,strlen(PRAGMA_NOLOOPREV)) == 0) { - doPragma(P_EXCLUDE,NULL); + doPragma(P_LOOPREV,NULL); return 0; }