diff files.c @ 8:97243badae69

split place stuff to its own file
author David A. Holland
date Sun, 19 Dec 2010 19:15:55 -0500
parents b8167949474a
children 1fbcbd58742e
line wrap: on
line diff
--- a/files.c	Sun Dec 19 19:08:24 2010 -0500
+++ b/files.c	Sun Dec 19 19:15:55 2010 -0500
@@ -1,4 +1,3 @@
-#include <stdarg.h>
 #include <stdbool.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -7,14 +6,9 @@
 #include <err.h>
 
 #include "array.h"
+#include "place.h"
 #include "files.h"
 
-struct place {
-	struct seenfile *file;
-	unsigned line;
-	unsigned column;
-};
-
 struct incdir {
 	const char *name;
 	bool issystem;
@@ -33,7 +27,6 @@
 
 static struct incdirarray quotepath, bracketpath;
 static struct seenfilearray seenfiles;
-static bool overall_failure;
 
 ////////////////////////////////////////////////////////////
 // management
@@ -138,152 +131,18 @@
 }
 
 ////////////////////////////////////////////////////////////
-// places and complaints
-
-#define NOWHERE_LINE      0
-#define BUILTIN_LINE      1
-#define COMMANDLINE_LINE  2
-
-static struct place scratchplace;
-static bool scratchplace_inuse;
-
-static
-bool
-place_isnowhere(const struct place *p)
-{
-	return p->file == NULL && p->line == NOWHERE_LINE;
-}
+// seenfile functions exposed for places.c
 
-static
-bool
-place_isbuiltin(const struct place *p)
-{
-	return p->file == NULL && p->line == BUILTIN_LINE;
-}
-
-static
-bool
-place_iscommandline(const struct place *p)
-{
-	return p->file == NULL && p->line == COMMANDLINE_LINE;
-}
-
-struct place *
-place_gettemporary(void)
+const char *
+seenfile_getname(const struct seenfile *file)
 {
-	assert(!scratchplace_inuse);
-	scratchplace_inuse = true;
-	return &scratchplace;
-}
-
-void
-place_puttemporary(struct place *p)
-{
-	assert(scratchplace_inuse);
-	assert(p == &scratchplace);
-	scratchplace_inuse = false;
-}
-
-struct place *
-place_create(void)
-{
-	struct place *p;
-
-	p = domalloc(sizeof(*p));
-	place_setnowhere(p);
-	return p;
-}
-
-struct place *
-place_clone(const struct place *op)
-{
-	struct place *p;
-
-	p = domalloc(sizeof(*p));
-	*p = *op;
-	return p;
-}
-
-void
-place_destroy(struct place *p)
-{
-	free(p);
+	return file->name;
 }
 
-void
-place_setnowhere(struct place *p)
-{
-	p->file = NULL;
-	p->line = NOWHERE_LINE;
-	p->column = 0;
-}
-
-void
-place_setbuiltin(struct place *p, unsigned num)
-{
-	p->file = NULL;
-	p->line = BUILTIN_LINE;
-	p->column = num;
-}
-
-void
-place_setcommandline(struct place *p, unsigned column)
-{
-	p->file = NULL;
-	p->line = COMMANDLINE_LINE;
-	p->column = column;
-}
-
-static
-void
-place_print(const struct place *p)
+const struct place *
+seenfile_getincludeplace(const struct seenfile *file)
 {
-	if (place_iscommandline(p)) {
-		fprintf(stderr, "<command-line>:1:%u", p->column);
-	} else if (place_isbuiltin(p)) {
-		fprintf(stderr, "<built-in>:%u:1", p->column);
-	} else {
-		fprintf(stderr, "%s:%u:%u", p->file->name, p->line, p->column);
-	}
-}
-
-static
-void
-place_printfrom(const struct place *p)
-{
-	if (!place_isnowhere(&p->file->includedfrom)) {
-		place_printfrom(&p->file->includedfrom);
-	}
-	fprintf(stderr, "In file included from ");
-	fprintf(stderr, ":\n");
-}
-
-void
-complain(const struct place *p, const char *fmt, ...)
-{
-	va_list ap;
-
-	if (!place_isnowhere(&p->file->includedfrom)) {
-		place_printfrom(&p->file->includedfrom);
-	}
-	place_print(p);
-	fprintf(stderr, ": ");
-	va_start(ap, fmt);
-	vfprintf(stderr, fmt, ap);
-	va_end(ap);
-	fprintf(stderr, "\n");
-}
-
-void
-complain_fail(void)
-{
-	overall_failure = true;
-}
-
-bool
-complain_failed(void)
-{
-	return overall_failure;
+	return &file->includedfrom;
 }
 
 ////////////////////////////////////////////////////////////