Date: Wed, 12 Jul 2006 02:45:36 GMT From: Spencer Whitman <swhitman@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 101320 for review Message-ID: <200607120245.k6C2jaQb045660@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=101320 Change 101320 by swhitman@swhitman_joethecat on 2006/07/12 02:44:37 Work on #define Affected files ... .. //depot/projects/soc2006/swhitman-K_Kernel_Meta-Language/k/cpp.c#10 edit .. //depot/projects/soc2006/swhitman-K_Kernel_Meta-Language/k/k.c#10 edit .. //depot/projects/soc2006/swhitman-K_Kernel_Meta-Language/k/k.h#7 edit .. //depot/projects/soc2006/swhitman-K_Kernel_Meta-Language/k/lexer.c#8 edit Differences ... ==== //depot/projects/soc2006/swhitman-K_Kernel_Meta-Language/k/cpp.c#10 (text+ko) ==== @@ -45,7 +45,10 @@ }; struct define { - TAILQ_ENTRY(defines) list; + const char *name; /* Name of the macro */ + /* Arguments of the macro */ + /* Value of the macro */ + TAILQ_ENTRY(defines) list; /* Link to list of macros */ }; static TAILQ_HEAD(,iarg) iarg = TAILQ_HEAD_INITIALIZER(iarg); @@ -88,23 +91,23 @@ static const char * skipspace(struct cppfilestate *cfs, const char *s, const char *e) { - /* skip leading spaces, including line continuation */ - while (s < e) { - /* XXX This code will choke on single \'s or /'s */ - /* XXX Not sure if this is what needs to be edited */ - if (*s == '\\' && s + 1 < e && isvert(s[1])) { - s++; - continue; - } - if (*s == '/') { - s = skipcomment(cfs, s, e); - s++; - } - if (!isspace(*s)) - break; - s++; - } - return (s); + /* skip leading spaces, including line continuation */ + while (s < e) { + /* XXX This code will choke on single \'s or /'s */ + /* XXX Not sure if this is what needs to be edited */ + if (*s == '\\' && s + 1 < e && isvert(s[1])) { + s++; + continue; + } + if (*s == '/') { + s = skipcomment(cfs, s, e); + s++; + } + if (!isspace(*s)) + break; + s++; + } + return (s); } static const char * @@ -229,14 +232,39 @@ /* * Define statment should be of the form: * #define NAME(vars) value - * If value continues along more than one line, it should end with a \\n + * If it continues along more than one line, the line should end with a \\n + * (this may already be taken care of). vars and value are both optional. */ static void cpp_define(CPP_ARGS) { /* struct cppfilestate *cfs __unused, const char *h __unused, const char *b __unused, const char *e __unused */ + const char * name_b; + const char * name_e; + printf("#define of %V\n",String(b,e)); + + /* The first token is the macro name */ + name_b = skipspace(cfs, b, e); + + /* Find the end of the name by finding the first white space char or '(' */ + for(name_e = name_b; (name_e < e); name_e++) { + /* Object like macro */ + if ((isspace(*name_e)) || + /* XXX This is ugly; any better way to do this? */ + ((name_e + 1 < e) && ((name_e[1] == '\\') && (name_e[2] == 's')))) { + + printf("Defining object macro name %V\n",String(name_b,name_e)); + } + /* Function like macro */ + else if (*name_e == '(') { + printf("Defining function macro name %V\n",String(name_b,name_e)); + } + else + continue; + } + } static void @@ -245,6 +273,7 @@ /* struct cppfilestate *cfs __unused, const char *h __unused, const char *b __unused, const char *e __unused */ printf("#undef of %V\n",String(b,e)); + } static void ==== //depot/projects/soc2006/swhitman-K_Kernel_Meta-Language/k/k.c#10 (text+ko) ==== ==== //depot/projects/soc2006/swhitman-K_Kernel_Meta-Language/k/k.h#7 (text+ko) ==== ==== //depot/projects/soc2006/swhitman-K_Kernel_Meta-Language/k/lexer.c#8 (text+ko) ==== @@ -149,7 +149,7 @@ un_hash(const char *s, const char *e) { const char *r; - char *p; /*, *q;*/ /* XXX Q seems unneccessary (just a memory leak) */ + char *p; /*, *q;*/ /* XXX q seems unneccessary (just a memory leak) */ int same = 1; /*q =*/ p = malloc(1 + (e - s)); @@ -283,7 +283,7 @@ continue; case '#': - /* XXX Not quite sure what this case does */ + /* Stringification (?) */ printf("# %V\n", String(b, e)); u = strtoul(b + 1, &q, 0); if (q == NULL)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200607120245.k6C2jaQb045660>