Date: Mon, 17 Jul 2006 18:55:07 GMT From: Spencer Whitman <swhitman@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 101786 for review Message-ID: <200607171855.k6HIt7LJ027660@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=101786 Change 101786 by swhitman@swhitman_joethecat on 2006/07/17 18:54:10 More work on #define Affected files ... .. //depot/projects/soc2006/swhitman-K_Kernel_Meta-Language/k/cpp.c#12 edit .. //depot/projects/soc2006/swhitman-K_Kernel_Meta-Language/k/k.h#9 edit .. //depot/projects/soc2006/swhitman-K_Kernel_Meta-Language/k/string.c#7 edit Differences ... ==== //depot/projects/soc2006/swhitman-K_Kernel_Meta-Language/k/cpp.c#12 (text+ko) ==== @@ -44,9 +44,9 @@ struct ref *r; }; -#define OBJ_MAC_TYPE 0 /* For object like macros (no paraens, no arguments) */ -#define FUNC_MAC_TYPE 1 /* For function like macros (paraens and arguments) */ - +#define OBJ_MAC_TYPE 0/* For object like macros (no paraens, no arguments) */ +#define FUNC_MAC_TYPE 1/* For function like macros (paraens and arguments) */ +#define NONE_MAC_TYPE -1/* Inital value. Indecates type was not set */ struct define { const char *name; /* Name of the macro */ int mac_type; /* Object or function like macro */ @@ -245,11 +245,12 @@ /* - * This function attempts to add a define specified by b and e to the define list - * Define statment should be of the form: + * This function attempts to add a define specified by b and e to the define + * list. Define statments should be of the form: * #define NAME(vars) value - * If it continues along more than one line, the line should end with a \\n (backslash - * newline) (this may already be taken care of ?). vars and value are both optional. + * If it continues along more than one line, the line should end with a \\n + * (backslash newline) (this may already be taken care of ?). vars and value + * are both optional. */ static void cpp_add_define(const char *b, const char *e) @@ -262,13 +263,16 @@ mac = malloc(sizeof *mac); assert(mac != NULL); + + mac->mac_type = NONE_MAC_TYPE; /* 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')))) { + ((name_e + 1 < e) && + ((name_e[1] == '\\') && (name_e[2] == 's')))) { printf("Defining object macro name %V\n",p); mac->mac_type = OBJ_MAC_TYPE; break; @@ -282,17 +286,30 @@ else continue; } - /* XXX check for failure of either case */ + p = String(name_b,name_e); + if(isspace(*p) || *p == '\0') + errx(1, "no macro name given in #define directive"); mac->name = p; + + if(mac->mac_type == NONE_MAC_TYPE) { + printf("Defining object macro name %V\n", p); + mac->mac_type = OBJ_MAC_TYPE; + } switch (mac->mac_type) { case OBJ_MAC_TYPE: + break; case FUNC_MAC_TYPE: - /* Make sure function macro is wellformed (has a matching ')', arguments are correct, - * etc.) Add arguments to mac. - */ + { + /* Make sure function macro is wellformed (has a matching ')', arguments + * are correct, etc.) Add arguments to mac. + */ + + + } + break; default: break; } ==== //depot/projects/soc2006/swhitman-K_Kernel_Meta-Language/k/k.h#9 (text+ko) ==== @@ -161,7 +161,7 @@ void Coord(struct h *h, const char *b, const char *e, unsigned *line, const char **file); unsigned BackSlash(const char *p, const char **n); const char *StringEnd(const char *s, const char *e); - +/*const char *ParenEnd(const char *ptr, const char *ep);*/ /* symbol.c */ struct symbol *NewSymbol(struct sym_scope *scope, enum symspace spc, const char *t); ==== //depot/projects/soc2006/swhitman-K_Kernel_Meta-Language/k/string.c#7 (text+ko) ==== @@ -193,6 +193,21 @@ } } +/* +const char * +ParenEnd(const char *ptr, const char *ep) +{ + const char * p; + + for(p = ptr +1; p < ep; p++) { + if(*p == ')') + return (p + 1); + } + + return NULL; +} +*/ + const char * StringEnd(const char *ptr, const char *ep) {
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200607171855.k6HIt7LJ027660>