]> git.sur5r.net Git - cc65/commitdiff
Evaluate .asserts with known conditions in the assembler.
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 19 Apr 2005 22:03:30 +0000 (22:03 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 19 Apr 2005 22:03:30 +0000 (22:03 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@3471 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/ca65/pseudo.c

index 6ac295017bf28cdc578cf61a8cd53e10f214abb0..2522e54c8f945a46f2ebb2f14c9b5012f625e51a 100644 (file)
@@ -384,8 +384,8 @@ static void DoAssert (void)
         "ERROR"
     };
 
-    int Action;
-
+    int  Action;
+    long Val;
 
     /* First we have the expression that has to evaluated */
     ExprNode* Expr = Expression ();
@@ -419,10 +419,35 @@ static void DoAssert (void)
     /* Read the message */
     if (Tok != TOK_STRCON) {
        ErrorSkip ("String constant expected");
+        return;
+    }
+
+    /* If we can evaluate the assertion now, there's no need to pass it to the
+     * linker.
+     */
+    if (IsConstExpr (Expr, &Val)) {
+        /* We can evaluate the expression, so handle it in the assembler */
+        switch (Action) {
+
+            case ASSERT_ACT_WARN:
+                Warning (0, "%s", SVal);
+                break;
+
+            case ASSERT_ACT_ERROR:
+                Error ("%s", SVal);
+                break;
+
+            default:
+                Internal ("Illegal assert action specifier");
+                break;
+        }
     } else {
+        /* Cannot evaluate, add it to the object file */
         AddAssertion (Expr, Action, GetStringId (SVal));
-        NextTok ();
     }
+
+    /* Skip the message */
+    NextTok ();
 }