]> git.sur5r.net Git - cc65/commitdiff
Added missing files
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 6 Jun 2003 21:15:42 +0000 (21:15 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 6 Jun 2003 21:15:42 +0000 (21:15 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@2206 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/ld65/asserts.c [new file with mode: 0644]
src/ld65/asserts.h [new file with mode: 0644]

diff --git a/src/ld65/asserts.c b/src/ld65/asserts.c
new file mode 100644 (file)
index 0000000..56b546a
--- /dev/null
@@ -0,0 +1,134 @@
+/*****************************************************************************/
+/*                                                                           */
+/*                                 asserts.c                                 */
+/*                                                                           */
+/*                      Assertions for the ld65 linker                       */
+/*                                                                           */
+/*                                                                           */
+/*                                                                           */
+/* (C) 2003      Ullrich von Bassewitz                                       */
+/*               Römerstrasse 52                                             */
+/*               D-70794 Filderstadt                                         */
+/* EMail:        uz@cc65.org                                                 */
+/*                                                                           */
+/*                                                                           */
+/* This software is provided 'as-is', without any expressed or implied       */
+/* warranty.  In no event will the authors be held liable for any damages    */
+/* arising from the use of this software.                                    */
+/*                                                                           */
+/* Permission is granted to anyone to use this software for any purpose,     */
+/* including commercial applications, and to alter it and redistribute it    */
+/* freely, subject to the following restrictions:                            */
+/*                                                                           */
+/* 1. The origin of this software must not be misrepresented; you must not   */
+/*    claim that you wrote the original software. If you use this software   */
+/*    in a product, an acknowledgment in the product documentation would be  */
+/*    appreciated but is not required.                                       */
+/* 2. Altered source versions must be plainly marked as such, and must not   */
+/*    be misrepresented as being the original software.                      */
+/* 3. This notice may not be removed or altered from any source              */
+/*    distribution.                                                          */
+/*                                                                           */
+/*****************************************************************************/
+
+
+
+/* common */
+#include "assertdefs.h"
+#include "coll.h"
+#include "xmalloc.h"
+
+/* ld65 */
+#include "asserts.h"
+#include "error.h"
+#include "expr.h"
+#include "fileio.h"
+#include "objdata.h"
+#include "spool.h"
+
+
+
+/*****************************************************************************/
+/*                                          Data                                    */
+/*****************************************************************************/
+
+
+
+/* List with all assertions */
+static Collection Assertions = STATIC_COLLECTION_INITIALIZER;
+
+
+
+/*****************************************************************************/
+/*                                          Code                                    */
+/*****************************************************************************/
+
+
+
+Assertion* ReadAssertion (FILE* F, struct ObjData* O)
+/* Read an assertion from the given file */
+{
+    /* Allocate memory */
+    Assertion* A = xmalloc (sizeof (Assertion));
+
+    /* Read the fields from the file */
+    A->Expr = ReadExpr (F, O);
+    A->Action = ReadVar (F);
+    A->Msg = MakeGlobalStringId (O, ReadVar (F));
+    ReadFilePos (F, &A->Pos);
+
+    /* Set remaining fields */
+    A->Obj = O;
+
+    /* Add the assertion to the global list */
+    CollAppend (&Assertions, A);
+
+    /* Return the new struct */
+    return A;
+}
+
+
+
+void CheckAssertions (void)
+/* Check all assertions */
+{
+    unsigned I;
+
+    /* Walk over all assertions */
+    for (I = 0; I < CollCount (&Assertions); ++I) {
+
+        /* Get the assertion */
+        Assertion* A = CollAtUnchecked (&Assertions, I);
+
+        /* 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);
+        } 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:
+                    Warning ("%s(%lu): %s", Module, A->Pos.Line, Message);
+                    break;
+
+                case ASSERT_ACT_ERROR:
+                    Error ("%s(%lu): %s", Module, A->Pos.Line, Message);
+                    break;
+
+                default:
+                    Internal ("Invalid assertion action (%u) in module `%s', "
+                              "line %lu (file corrupt?)",
+                              A->Action, Module, A->Pos.Line);
+                    break;
+            }
+        }
+    }
+}
+
+
+
diff --git a/src/ld65/asserts.h b/src/ld65/asserts.h
new file mode 100644 (file)
index 0000000..765be6e
--- /dev/null
@@ -0,0 +1,85 @@
+/*****************************************************************************/
+/*                                                                           */
+/*                                 asserts.h                                 */
+/*                                                                           */
+/*                      Assertions for the ld65 linker                       */
+/*                                                                           */
+/*                                                                           */
+/*                                                                           */
+/* (C) 2003      Ullrich von Bassewitz                                       */
+/*               Römerstrasse 52                                             */
+/*               D-70794 Filderstadt                                         */
+/* EMail:        uz@cc65.org                                                 */
+/*                                                                           */
+/*                                                                           */
+/* This software is provided 'as-is', without any expressed or implied       */
+/* warranty.  In no event will the authors be held liable for any damages    */
+/* arising from the use of this software.                                    */
+/*                                                                           */
+/* Permission is granted to anyone to use this software for any purpose,     */
+/* including commercial applications, and to alter it and redistribute it    */
+/* freely, subject to the following restrictions:                            */
+/*                                                                           */
+/* 1. The origin of this software must not be misrepresented; you must not   */
+/*    claim that you wrote the original software. If you use this software   */
+/*    in a product, an acknowledgment in the product documentation would be  */
+/*    appreciated but is not required.                                       */
+/* 2. Altered source versions must be plainly marked as such, and must not   */
+/*    be misrepresented as being the original software.                      */
+/* 3. This notice may not be removed or altered from any source              */
+/*    distribution.                                                          */
+/*                                                                           */
+/*****************************************************************************/
+
+
+
+#ifndef ASSERTS_H
+#define ASSERTS_H
+
+
+
+#include <stdio.h>
+
+/* common */
+#include "filepos.h"
+
+
+
+/*****************************************************************************/
+/*                                          Data                                    */
+/*****************************************************************************/
+
+
+
+/* Assertion object */
+typedef struct Assertion Assertion;
+struct Assertion {
+    FilePos             Pos;            /* File position of assertion */
+    struct ExprNode*    Expr;           /* Expression to evaluate */
+    unsigned            Action;         /* What to do */
+    unsigned            Msg;            /* Message to print */
+    struct ObjData*     Obj;            /* Object file containing the assertion */
+};
+
+
+
+/*****************************************************************************/
+/*                                          Code                                    */
+/*****************************************************************************/
+
+
+
+Assertion* ReadAssertion (FILE* F, struct ObjData* O);
+/* Read an assertion from the given file */
+
+void CheckAssertions (void);
+/* Check all assertions */
+
+
+
+/* End of asserts.h */
+
+#endif
+
+
+