# HG changeset patch # User David A. Holland # Date 1292804155 18000 # Node ID 97243badae69be286729c7fa133c51466ed44de4 # Parent b8167949474a121736f1f9841cf62f6e5402bbab split place stuff to its own file diff -r b8167949474a -r 97243badae69 Makefile --- a/Makefile Sun Dec 19 19:08:24 2010 -0500 +++ b/Makefile Sun Dec 19 19:15:55 2010 -0500 @@ -1,7 +1,7 @@ # $NetBSD$ PROG= tradcpp -SRCS= main.c files.c array.c utils.c +SRCS= main.c files.c place.c array.c utils.c WARNS= 5 .include diff -r b8167949474a -r 97243badae69 files.c --- 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 #include #include #include @@ -7,14 +6,9 @@ #include #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, ":1:%u", p->column); - } else if (place_isbuiltin(p)) { - fprintf(stderr, ":%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; } //////////////////////////////////////////////////////////// diff -r b8167949474a -r 97243badae69 files.h --- a/files.h Sun Dec 19 19:08:24 2010 -0500 +++ b/files.h Sun Dec 19 19:15:55 2010 -0500 @@ -1,14 +1,5 @@ struct place; -struct place *place_gettemporary(void); -void place_puttemporary(struct place *p); -struct place *place_create(void); -struct place *place_clone(const struct place *p); -void place_destroy(struct place *); -void place_setnowhere(struct place *p); -void place_setbuiltin(struct place *p, unsigned num); -void place_setcommandline(struct place *p, unsigned column); - void files_init(void); void files_cleanup(void); diff -r b8167949474a -r 97243badae69 main.c --- a/main.c Sun Dec 19 19:08:24 2010 -0500 +++ b/main.c Sun Dec 19 19:15:55 2010 -0500 @@ -10,6 +10,7 @@ #include "utils.h" #include "array.h" #include "mode.h" +#include "place.h" #include "files.h" #include "macro.h" diff -r b8167949474a -r 97243badae69 place.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/place.c Sun Dec 19 19:15:55 2010 -0500 @@ -0,0 +1,163 @@ +#include +#include +#include +#include + +#include "utils.h" +#include "place.h" + +static bool overall_failure; + +#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; +} + +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) +{ + 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); +} + +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) +{ + if (place_iscommandline(p)) { + fprintf(stderr, ":1:%u", p->column); + } else if (place_isbuiltin(p)) { + fprintf(stderr, ":%u:1", p->column); + } else { + fprintf(stderr, "%s:%u:%u", seenfile_getname(p->file), + p->line, p->column); + } +} + +static +void +place_printfrom(const struct place *p) +{ + const struct place *from; + + from = seenfile_getincludeplace(p->file); + if (!place_isnowhere(from)) { + place_printfrom(from); + } + fprintf(stderr, "In file included from "); + place_print(p); + fprintf(stderr, ":\n"); +} + +void +complain(const struct place *p, const char *fmt, ...) +{ + va_list ap; + const struct place *from; + + from = seenfile_getincludeplace(p->file); + if (!place_isnowhere(from)) { + place_printfrom(from); + } + 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; +} + diff -r b8167949474a -r 97243badae69 place.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/place.h Sun Dec 19 19:15:55 2010 -0500 @@ -0,0 +1,18 @@ +struct place { + struct seenfile *file; + unsigned line; + unsigned column; +}; + +struct place *place_gettemporary(void); +void place_puttemporary(struct place *p); +struct place *place_create(void); +struct place *place_clone(const struct place *p); +void place_destroy(struct place *); +void place_setnowhere(struct place *p); +void place_setbuiltin(struct place *p, unsigned num); +void place_setcommandline(struct place *p, unsigned column); + +/* in files.c */ +const char *seenfile_getname(const struct seenfile *file); +const struct place *seenfile_getincludeplace(const struct seenfile *file); diff -r b8167949474a -r 97243badae69 utils.h --- a/utils.h Sun Dec 19 19:08:24 2010 -0500 +++ b/utils.h Sun Dec 19 19:15:55 2010 -0500 @@ -13,7 +13,7 @@ char *dostrdup2(const char *s, const char *t); char *dostrdup3(const char *s, const char *t, const char *u); -/* in files.c */ +/* in place.c */ void complain(const struct place *, const char *fmt, ...); void complain_fail(void); bool complain_failed(void);