fixed a shift bug
[fw/sdcc] / src / SDCC.lex
index a7ba72a729a170eb8f0c89a3bc2b2db134bb6685..a400a6f0ca928ae6391203ce377e48d1965b5cf2 100644 (file)
@@ -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,6 +75,7 @@ struct options  save_options  ;
      P_NOGCSE    ,
      P_CALLEE_SAVES,
      P_EXCLUDE   ,
+     P_NOIV      ,
      P_LOOPREV   ,
      P_OVERLAY_             /* I had a strange conflict with P_OVERLAY while */
                     /* cross-compiling for MINGW32 with gcc 3.2 */
@@ -285,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 {
@@ -458,6 +460,9 @@ void doPragma (int op, char *cp)
     case P_EXCLUDE:
        parseWithComma(options.excludeRegs, Safe_strdup(cp));
        break;
+    case P_NOIV:
+       options.noiv = 1;
+       break;
     case P_LOOPREV:
        optimize.noLoopReverse = 1;
        break;
@@ -543,6 +548,11 @@ 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_LOOPREV,NULL);
        return 0;