char *stringLiteral();
char *currFname;
-extern int lineno ;
+extern int lineno, column;
extern char *filename ;
extern char *fullSrcFileName ;
int yylineno = 1 ;
void count() ;
-void comment();
int process_pragma(char *);
#undef yywrap
P_NOGCSE ,
P_CALLEE_SAVES,
P_EXCLUDE ,
- P_LOOPREV
+ P_LOOPREV ,
+ P_OVERLAY
};
%}
%%
"_asm" {
count();
- asmp = asmbuff = Safe_realloc (asmbuff, INITIAL_INLINEASM);
+ asmp = asmbuff = realloc (asmbuff, INITIAL_INLINEASM);
asmbuffSize=INITIAL_INLINEASM;
BEGIN(asm) ;
}
<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);
// 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];
// 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) ; }
"_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); }
"\r\n" { count(); }
"\n" { count(); }
[ \t\v\f] { count(); }
+\\ {
+ 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] ;
/* 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 */
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;
/* 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') {
/* \<newline> is a continuator */
lineno=++yylineno;
+ column=0;
continue;
}
*str++ = '\\'; /* backslash in place */
}
/* 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;
}
while ((ch = input()) && (isspace(ch) || ch=='\\')) {
switch (ch) {
case '\\':
- //werror (W_STRAY_BACKSLASH)
+ if ((ch=input())!='\n') {
+ werror (W_STRAY_BACKSLASH, column);
+ unput(ch);
+ } else {
+ lineno=++yylineno;
+ column=0;
+ }
break;
case '\n':
yylineno++;
if (!ch)
break;
-
+
if (ch != '\"') {
unput(ch) ;
break ;
/* 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;
break;
+ case P_OVERLAY:
+ break; /* notyet */
}
}
}
if (strncmp(cp,PRAGMA_NOLOOPREV,strlen(PRAGMA_NOLOOPREV)) == 0) {
- doPragma(P_EXCLUDE,NULL);
+ doPragma(P_LOOPREV,NULL);
return 0;
}
{
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;
}