]> git.sur5r.net Git - cc65/blobdiff - src/ld65/asserts.c
Removed unneeded include files.
[cc65] / src / ld65 / asserts.c
index d0902e924ea3619c92611f78500d5983a78ffcec..650fd07458d18fb735b28eb72444f3349c5961e2 100644 (file)
@@ -6,7 +6,7 @@
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 2003-2009, Ullrich von Bassewitz                                      */
+/* (C) 2003-2011, Ullrich von Bassewitz                                      */
 /*                Roemerstrasse 52                                           */
 /*                D-70794 Filderstadt                                        */
 /* EMail:         uz@cc65.org                                                */
@@ -43,6 +43,7 @@
 #include "error.h"
 #include "expr.h"
 #include "fileio.h"
+#include "lineinfo.h"
 #include "objdata.h"
 #include "spool.h"
 
@@ -56,7 +57,7 @@
 
 /* Assertion struct decl */
 struct Assertion {
-    FilePos             Pos;            /* File position of assertion */
+    Collection          LineInfos;      /* File position of assertion */
     ExprNode*           Expr;           /* Expression to evaluate */
     AssertAction        Action;         /* What to do */
     unsigned            Msg;            /* Message to print */
@@ -81,10 +82,11 @@ Assertion* ReadAssertion (FILE* F, struct ObjData* O)
     Assertion* A = xmalloc (sizeof (Assertion));
 
     /* Read the fields from the file */
-    A->Expr = ReadExpr (F, O);
-    A->Action = (AssertAction) ReadVar (F);
-    A->Msg = MakeGlobalStringId (O, ReadVar (F));
-    ReadFilePos (F, &A->Pos);
+    A->LineInfos = EmptyCollection;
+    A->Expr      = ReadExpr (F, O);
+    A->Action    = (AssertAction) ReadVar (F);
+    A->Msg       = MakeGlobalStringId (O, ReadVar (F));
+    ReadLineInfoList (F, O, &A->LineInfos);
 
     /* Set remaining fields */
     A->Obj = O;
@@ -106,6 +108,10 @@ void CheckAssertions (void)
     /* Walk over all assertions */
     for (I = 0; I < CollCount (&Assertions); ++I) {
 
+        const LineInfo* LI;
+        const char* Module;
+        unsigned Line;
+
         /* Get the assertion */
         Assertion* A = CollAtUnchecked (&Assertions, I);
 
@@ -114,32 +120,38 @@ void CheckAssertions (void)
             continue;
         }
 
+        /* Retrieve the relevant line info for this assertion */
+        LI = CollConstAt (&A->LineInfos, 0);
+
+        /* Get file name and line number from the source */
+        Module = GetSourceName (LI);
+        Line   = GetSourceLine (LI);
+
         /* If the expression is not constant, we're not able to handle it */
         if (!IsConstExpr (A->Expr)) {
-            Warning ("Cannot evaluate assertion in module `%s', line %lu",
-                     GetSourceFileName (A->Obj, A->Pos.Name), A->Pos.Line);
+            Warning ("Cannot evaluate assertion in module `%s', line %u",
+                     Module, Line);
         } else if (GetExprVal (A->Expr) == 0) {
 
             /* Assertion failed */
-            const char* Module  = GetSourceFileName (A->Obj, A->Pos.Name);
             const char* Message = GetString (A->Msg);
 
             switch (A->Action) {
 
                 case ASSERT_ACT_WARN:
                 case ASSERT_ACT_LDWARN:
-                    Warning ("%s(%lu): %s", Module, A->Pos.Line, Message);
+                    Warning ("%s(%u): %s", Module, Line, Message);
                     break;
 
                 case ASSERT_ACT_ERROR:
                 case ASSERT_ACT_LDERROR:
-                    Error ("%s(%lu): %s", Module, A->Pos.Line, Message);
+                    Error ("%s(%u): %s", Module, Line, Message);
                     break;
 
                 default:
                     Internal ("Invalid assertion action (%u) in module `%s', "
-                              "line %lu (file corrupt?)",
-                              A->Action, Module, A->Pos.Line);
+                              "line %u (file corrupt?)",
+                              A->Action, Module, Line);
                     break;
             }
         }