]> git.sur5r.net Git - cc65/blobdiff - src/ca65/condasm.c
Rename symbol index => import id because that's what it really is.
[cc65] / src / ca65 / condasm.c
index 88d7716f70bc3ffebec45c5c22fc8416a0c5be37..e89bcf62b52f708129d75637d62db0d0eacde71e 100644 (file)
@@ -6,10 +6,10 @@
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 2000-2003 Ullrich von Bassewitz                                       */
-/*               Römerstraße 52                                              */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
+/* (C) 2000-2010, Ullrich von Bassewitz                                      */
+/*                Roemerstrasse 52                                           */
+/*                D-70794 Filderstadt                                        */
+/* EMail:         uz@cc65.org                                                */
 /*                                                                           */
 /*                                                                           */
 /* This software is provided 'as-is', without any expressed or implied       */
@@ -122,7 +122,7 @@ static IfDesc* GetCurrentIf (void)
 static void FreeIf (void)
 /* Free all .IF descriptors until we reach one with the NeedTerm bit set */
 {
-    int Done = 0;
+    int Done;
     do {
                IfDesc* D = GetCurrentIf();
                if (D == 0) {
@@ -210,7 +210,7 @@ void DoConditionals (void)
            case TOK_ELSE:
                        D = GetCurrentIf ();
                if (D == 0) {
-                   Error ("Unexpected .ELSE");
+                           Error ("Unexpected .ELSE");
                        } else if (GetElse(D)) {
                    /* We already had a .ELSE ! */
                    Error ("Duplicate .ELSE");
@@ -223,6 +223,7 @@ void DoConditionals (void)
                    IfCond = GetCurrentIfCond ();
                }
                NextTok ();
+               ExpectSep ();
                        break;
 
                    case TOK_ELSEIF:
@@ -247,6 +248,7 @@ void DoConditionals (void)
                     */
                    if (IfCond == 0) {
                        SetIfCond (D, ConstExpression ());
+                       ExpectSep ();
                    }
 
                    /* Get the new overall condition */
@@ -262,6 +264,7 @@ void DoConditionals (void)
                 * has been cleanup up, since we may be at end of file.
                 */
                NextTok ();
+               ExpectSep ();
 
                /* Get the new overall condition */
                IfCond = GetCurrentIfCond ();
@@ -272,6 +275,7 @@ void DoConditionals (void)
                NextTok ();
                if (IfCond) {
                    SetIfCond (D, ConstExpression ());
+                   ExpectSep ();
                }
                IfCond = GetCurrentIfCond ();
                break;
@@ -297,6 +301,7 @@ void DoConditionals (void)
                    ExprNode* Expr = Expression();
                    SetIfCond (D, IsConstExpr (Expr, 0));
                    FreeExpr (Expr);
+                   ExpectSep ();
                }
                IfCond = GetCurrentIfCond ();
                break;
@@ -305,7 +310,7 @@ void DoConditionals (void)
                D = AllocIf (".IFDEF", 1);
                NextTok ();
                if (IfCond) {
-                   SymEntry* Sym = ParseScopedSymName (SYM_FIND_EXISTING);
+                           SymEntry* Sym = ParseAnySymName (SYM_FIND_EXISTING);
                    SetIfCond (D, Sym != 0 && SymIsDef (Sym));
                }
                IfCond = GetCurrentIfCond ();
@@ -321,7 +326,7 @@ void DoConditionals (void)
                        SetIfCond (D, 1);
                         SkipUntilSep ();
                     }
-               }
+               }
                IfCond = GetCurrentIfCond ();
                break;
 
@@ -332,6 +337,7 @@ void DoConditionals (void)
                    ExprNode* Expr = Expression();
                    SetIfCond (D, !IsConstExpr (Expr, 0));
                    FreeExpr (Expr);
+                   ExpectSep ();
                }
                IfCond = GetCurrentIfCond ();
                break;
@@ -340,8 +346,9 @@ void DoConditionals (void)
                D = AllocIf (".IFNDEF", 1);
                NextTok ();
                if (IfCond) {
-                   SymEntry* Sym = ParseScopedSymName (SYM_FIND_EXISTING);
+                   SymEntry* Sym = ParseAnySymName (SYM_FIND_EXISTING);
                    SetIfCond (D, Sym == 0 || !SymIsDef (Sym));
+                   ExpectSep ();
                }
                IfCond = GetCurrentIfCond ();
                break;
@@ -350,8 +357,9 @@ void DoConditionals (void)
                D = AllocIf (".IFNREF", 1);
                NextTok ();
                if (IfCond) {
-                   SymEntry* Sym = ParseScopedSymName (SYM_FIND_EXISTING);
+                   SymEntry* Sym = ParseAnySymName (SYM_FIND_EXISTING);
                    SetIfCond (D, Sym == 0 || !SymIsRef (Sym));
+                   ExpectSep ();
                }
                IfCond = GetCurrentIfCond ();
                break;
@@ -363,15 +371,17 @@ void DoConditionals (void)
                    SetIfCond (D, GetCPU() == CPU_6502);
                }
                IfCond = GetCurrentIfCond ();
+               ExpectSep ();
                break;
 
            case TOK_IFP816:
                D = AllocIf (".IFP816", 1);
-               NextTok ();
+               NextTok ();
                if (IfCond) {
                            SetIfCond (D, GetCPU() == CPU_65816);
                }
                IfCond = GetCurrentIfCond ();
+               ExpectSep ();
                break;
 
            case TOK_IFPC02:
@@ -381,6 +391,7 @@ void DoConditionals (void)
                            SetIfCond (D, GetCPU() == CPU_65C02);
                }
                IfCond = GetCurrentIfCond ();
+               ExpectSep ();
                break;
 
            case TOK_IFPSC02:
@@ -390,14 +401,16 @@ void DoConditionals (void)
                            SetIfCond (D, GetCPU() == CPU_65SC02);
                }
                IfCond = GetCurrentIfCond ();
+               ExpectSep ();
                break;
 
            case TOK_IFREF:
                D = AllocIf (".IFREF", 1);
                NextTok ();
                if (IfCond) {
-                   SymEntry* Sym = ParseScopedSymName (SYM_FIND_EXISTING);
+                   SymEntry* Sym = ParseAnySymName (SYM_FIND_EXISTING);
                    SetIfCond (D, Sym != 0 && SymIsRef (Sym));
+                   ExpectSep ();
                }
                IfCond = GetCurrentIfCond ();
                break;
@@ -413,6 +426,39 @@ void DoConditionals (void)
 
 
 
+int CheckConditionals (void)
+/* Check if the current token is one that starts a conditional directive, and
+ * call DoConditionals if so. Return true if a conditional directive was found,
+ * return false otherwise.
+ */
+{
+    switch (Tok) {
+        case TOK_ELSE:
+        case TOK_ELSEIF:
+        case TOK_ENDIF:
+        case TOK_IF:
+        case TOK_IFBLANK:
+        case TOK_IFCONST:
+        case TOK_IFDEF:
+        case TOK_IFNBLANK:
+        case TOK_IFNCONST:
+        case TOK_IFNDEF:
+        case TOK_IFNREF:
+        case TOK_IFP02:
+        case TOK_IFP816:
+        case TOK_IFPC02:
+        case TOK_IFPSC02:
+        case TOK_IFREF:
+            DoConditionals ();
+            return 1;
+
+        default:
+            return 0;
+    }
+}
+
+
+
 void CheckOpenIfs (void)
 /* Called from the scanner before closing an input file. Will check for any
  * open .ifs in this file.