diff place.c @ 10:800f3a560a3b

move seenfiles to place.c too
author David A. Holland
date Sun, 19 Dec 2010 19:27:14 -0500
parents 97243badae69
children b9d50e786322
line wrap: on
line diff
--- a/place.c	Sun Dec 19 19:19:02 2010 -0500
+++ b/place.c	Sun Dec 19 19:27:14 2010 -0500
@@ -4,17 +4,67 @@
 #include <stdlib.h>
 
 #include "utils.h"
+#include "array.h"
 #include "place.h"
 
-static bool overall_failure;
-
 #define NOWHERE_LINE      0
 #define BUILTIN_LINE      1
 #define COMMANDLINE_LINE  2
 
+struct seenfile {
+	struct place includedfrom;
+	char *name;
+	bool fromsystemdir;
+};
+DECLARRAY(seenfile);
+DEFARRAY(seenfile, );
+
+static bool overall_failure;
+
 static struct place scratchplace;
 static bool scratchplace_inuse;
 
+static struct seenfilearray seenfiles;
+
+////////////////////////////////////////////////////////////
+// seenfiles
+
+static
+struct seenfile *
+seenfile_create(const struct place *from, char *name, bool fromsystemdir)
+{
+	struct seenfile *sf;
+
+	sf = domalloc(sizeof(*sf));
+	sf->includedfrom = *from;
+	sf->name = name;
+	sf->fromsystemdir = fromsystemdir;
+	return sf;
+}
+
+static
+void
+seenfile_destroy(struct seenfile *sf)
+{
+	free(sf->name);
+	free(sf);
+}
+
+DESTROYALL_ARRAY(seenfile, );
+
+struct seenfile *
+place_seen_file(const struct place *place, char *file, bool issystem)
+{
+	struct seenfile *sf;
+
+	sf = seenfile_create(place, file, issystem);
+	seenfilearray_add(&seenfiles, sf, NULL);
+	return sf;
+}
+
+////////////////////////////////////////////////////////////
+// places
+
 static
 bool
 place_isnowhere(const struct place *p)
@@ -111,7 +161,7 @@
 	} else if (place_isbuiltin(p)) {
 		fprintf(stderr, "<built-in>:%u:1", p->column);
 	} else {
-		fprintf(stderr, "%s:%u:%u", seenfile_getname(p->file),
+		fprintf(stderr, "%s:%u:%u", p->file->name,
 			p->line, p->column);
 	}
 }
@@ -122,7 +172,7 @@
 {
 	const struct place *from;
 
-	from = seenfile_getincludeplace(p->file);
+	from = &p->file->includedfrom;
 	if (!place_isnowhere(from)) {
 		place_printfrom(from);
 	}
@@ -131,13 +181,16 @@
 	fprintf(stderr, ":\n");
 }
 
+////////////////////////////////////////////////////////////
+// complaints
+
 void
 complain(const struct place *p, const char *fmt, ...)
 {
 	va_list ap;
 	const struct place *from;
 
-	from = seenfile_getincludeplace(p->file);
+	from = &p->file->includedfrom;
 	if (!place_isnowhere(from)) {
 		place_printfrom(from);
 	}
@@ -161,3 +214,18 @@
 	return overall_failure;
 }
 
+////////////////////////////////////////////////////////////
+// module init and cleanup
+
+void
+place_init(void)
+{
+	seenfilearray_init(&seenfiles);
+}
+
+void
+place_cleanup(void)
+{
+	seenfilearray_destroyall(&seenfiles);
+	seenfilearray_cleanup(&seenfiles);
+}