Mercurial > ~dholland > hg > tradcpp > index.cgi
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); +}