OpenCores
URL https://opencores.org/ocsvn/eco32/eco32/trunk

Subversion Repositories eco32

[/] [eco32/] [tags/] [eco32-0.22/] [lcc/] [src/] [error.c] - Diff between revs 4 and 21

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 4 Rev 21
#include "c.h"
#include "c.h"
 
 
static char rcsid[] = "$Id: error.c,v 1.1 2002/08/28 23:12:43 drh Exp $";
static char rcsid[] = "$Id: error.c,v 1.1 2002/08/28 23:12:43 drh Exp $";
 
 
static void printtoken(void);
static void printtoken(void);
int errcnt   = 0;
int errcnt   = 0;
int errlimit = 20;
int errlimit = 20;
char kind[] = {
char kind[] = {
#define xx(a,b,c,d,e,f,g) f,
#define xx(a,b,c,d,e,f,g) f,
#define yy(a,b,c,d,e,f,g) f,
#define yy(a,b,c,d,e,f,g) f,
#include "token.h"
#include "token.h"
};
};
int wflag;              /* != 0 to suppress warning messages */
int wflag;              /* != 0 to suppress warning messages */
 
 
void test(int tok, char set[]) {
void test(int tok, char set[]) {
        if (t == tok)
        if (t == tok)
                t = gettok();
                t = gettok();
        else {
        else {
                expect(tok);
                expect(tok);
                skipto(tok, set);
                skipto(tok, set);
                if (t == tok)
                if (t == tok)
                        t = gettok();
                        t = gettok();
        }
        }
}
}
void expect(int tok) {
void expect(int tok) {
        if (t == tok)
        if (t == tok)
                t = gettok();
                t = gettok();
        else {
        else {
                error("syntax error; found");
                error("syntax error; found");
                printtoken();
                printtoken();
                fprint(stderr, " expecting `%k'\n", tok);
                fprint(stderr, " expecting `%k'\n", tok);
        }
        }
}
}
void error(const char *fmt, ...) {
void error(const char *fmt, ...) {
        va_list ap;
        va_list ap;
 
 
        if (errcnt++ >= errlimit) {
        if (errcnt++ >= errlimit) {
                errcnt = -1;
                errcnt = -1;
                error("too many errors\n");
                error("too many errors\n");
                exit(1);
                exit(1);
        }
        }
        va_start(ap, fmt);
        va_start(ap, fmt);
        if (firstfile != file && firstfile && *firstfile)
        if (firstfile != file && firstfile && *firstfile)
                fprint(stderr, "%s: ", firstfile);
                fprint(stderr, "%s: ", firstfile);
        fprint(stderr, "%w: ", &src);
        fprint(stderr, "%w: ", &src);
        vfprint(stderr, NULL, fmt, ap);
        vfprint(stderr, NULL, fmt, ap);
        va_end(ap);
        va_end(ap);
}
}
 
 
void skipto(int tok, char set[]) {
void skipto(int tok, char set[]) {
        int n;
        int n;
        char *s;
        char *s;
 
 
        assert(set);
        assert(set);
        for (n = 0; t != EOI && t != tok; t = gettok()) {
        for (n = 0; t != EOI && t != tok; t = gettok()) {
                for (s = set; *s && kind[t] != *s; s++)
                for (s = set; *s && kind[t] != *s; s++)
                        ;
                        ;
                if (kind[t] == *s)
                if (kind[t] == *s)
                        break;
                        break;
                if (n++ == 0)
                if (n++ == 0)
                        error("skipping");
                        error("skipping");
                if (n <= 8)
                if (n <= 8)
                        printtoken();
                        printtoken();
                else if (n == 9)
                else if (n == 9)
                        fprint(stderr, " ...");
                        fprint(stderr, " ...");
        }
        }
        if (n > 8) {
        if (n > 8) {
                fprint(stderr, " up to");
                fprint(stderr, " up to");
                printtoken();
                printtoken();
        }
        }
        if (n > 0)
        if (n > 0)
                fprint(stderr, "\n");
                fprint(stderr, "\n");
}
}
/* fatal - issue fatal error message and exit */
/* fatal - issue fatal error message and exit */
int fatal(const char *name, const char *fmt, int n) {
int fatal(const char *name, const char *fmt, int n) {
        print("\n");
        print("\n");
        errcnt = -1;
        errcnt = -1;
        error("compiler error in %s--", name);
        error("compiler error in %s--", name);
        fprint(stderr, fmt, n);
        fprint(stderr, fmt, n);
        exit(EXIT_FAILURE);
        exit(EXIT_FAILURE);
        return 0;
        return 0;
}
}
 
 
/* printtoken - print current token preceeded by a space */
/* printtoken - print current token preceeded by a space */
static void printtoken(void) {
static void printtoken(void) {
        switch (t) {
        switch (t) {
        case ID: fprint(stderr, " `%s'", token); break;
        case ID: fprint(stderr, " `%s'", token); break;
        case ICON:
        case ICON:
                fprint(stderr, " `%s'", vtoa(tsym->type, tsym->u.c.v));
                fprint(stderr, " `%s'", vtoa(tsym->type, tsym->u.c.v));
                break;
                break;
        case SCON: {
        case SCON: {
                int i, n;
                int i, n;
                if (ischar(tsym->type->type)) {
                if (ischar(tsym->type->type)) {
                        char *s = tsym->u.c.v.p;
                        char *s = tsym->u.c.v.p;
                        n = tsym->type->size;
                        n = tsym->type->size;
                        fprint(stderr, " \"");
                        fprint(stderr, " \"");
                        for (i = 0; i < 20 && i < n && *s; s++, i++)
                        for (i = 0; i < 20 && i < n && *s; s++, i++)
                                if (*s < ' ' || *s >= 0177)
                                if (*s < ' ' || *s >= 0177)
                                        fprint(stderr, "\\%o", *s);
                                        fprint(stderr, "\\%o", *s);
                                else
                                else
                                        fprint(stderr, "%c", *s);
                                        fprint(stderr, "%c", *s);
                } else {        /* wchar_t string */
                } else {        /* wchar_t string */
                        unsigned int *s = tsym->u.c.v.p;
                        unsigned int *s = tsym->u.c.v.p;
                        assert(tsym->type->type->size == widechar->size);
                        assert(tsym->type->type->size == widechar->size);
                        n = tsym->type->size/widechar->size;
                        n = tsym->type->size/widechar->size;
                        fprint(stderr, " L\"");
                        fprint(stderr, " L\"");
                        for (i = 0; i < 20 && i < n && *s; s++, i++)
                        for (i = 0; i < 20 && i < n && *s; s++, i++)
                                if (*s < ' ' || *s >= 0177)
                                if (*s < ' ' || *s >= 0177)
                                        fprint(stderr, "\\x%x", *s);
                                        fprint(stderr, "\\x%x", *s);
                                else
                                else
                                        fprint(stderr, "%c", *s);
                                        fprint(stderr, "%c", *s);
                }
                }
                if (i < n)
                if (i < n)
                        fprint(stderr, " ...");
                        fprint(stderr, " ...");
                else
                else
                        fprint(stderr, "\"");
                        fprint(stderr, "\"");
                break;
                break;
                }
                }
        case FCON:
        case FCON:
                fprint(stderr, " `%S'", token, (char*)cp - token);
                fprint(stderr, " `%S'", token, (char*)cp - token);
                break;
                break;
        case '`': case '\'': fprint(stderr, " \"%k\"", t); break;
        case '`': case '\'': fprint(stderr, " \"%k\"", t); break;
        default: fprint(stderr, " `%k'", t);
        default: fprint(stderr, " `%k'", t);
        }
        }
}
}
 
 
/* warning - issue warning error message */
/* warning - issue warning error message */
void warning(const char *fmt, ...) {
void warning(const char *fmt, ...) {
        va_list ap;
        va_list ap;
 
 
        va_start(ap, fmt);
        va_start(ap, fmt);
        if (wflag == 0) {
        if (wflag == 0) {
                errcnt--;
                errcnt--;
                error("warning: ");
                error("warning: ");
                vfprint(stderr, NULL, fmt, ap);
                vfprint(stderr, NULL, fmt, ap);
        }
        }
        va_end(ap);
        va_end(ap);
}
}
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.