=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/m4/eval.c,v retrieving revision 1.48 retrieving revision 1.49 diff -c -r1.48 -r1.49 *** src/usr.bin/m4/eval.c 2003/06/18 21:08:07 1.48 --- src/usr.bin/m4/eval.c 2003/06/30 21:42:50 1.49 *************** *** 1,4 **** ! /* $OpenBSD: eval.c,v 1.48 2003/06/18 21:08:07 espie Exp $ */ /* $NetBSD: eval.c,v 1.7 1996/11/10 21:21:29 pk Exp $ */ /* --- 1,4 ---- ! /* $OpenBSD: eval.c,v 1.49 2003/06/30 21:42:50 espie Exp $ */ /* $NetBSD: eval.c,v 1.7 1996/11/10 21:21:29 pk Exp $ */ /* *************** *** 37,43 **** #if 0 static char sccsid[] = "@(#)eval.c 8.2 (Berkeley) 4/27/95"; #else ! static char rcsid[] = "$OpenBSD: eval.c,v 1.48 2003/06/18 21:08:07 espie Exp $"; #endif #endif /* not lint */ --- 37,43 ---- #if 0 static char sccsid[] = "@(#)eval.c 8.2 (Berkeley) 4/27/95"; #else ! static char rcsid[] = "$OpenBSD: eval.c,v 1.49 2003/06/30 21:42:50 espie Exp $"; #endif #endif /* not lint */ *************** *** 61,69 **** #include "extern.h" #include "pathnames.h" - #define BUILTIN_MARKER "__builtin_" - - static void setup_definition(ndptr, const char *); static void dodefn(const char *); static void dopushdef(const char *, const char *); static void dodump(const char *[], int); --- 61,66 ---- *************** *** 82,88 **** static const char *handledash(char *, char *, const char *); static void expand_builtin(const char *[], int, int); static void expand_macro(const char *[], int); ! static void dump_one_def(ndptr); unsigned long expansion_id; --- 79,85 ---- static const char *handledash(char *, char *, const char *); static void expand_builtin(const char *[], int, int); static void expand_macro(const char *[], int); ! static void dump_one_def(const char *, struct macro_definition *); unsigned long expansion_id; *************** *** 91,97 **** * argc - number of elements in argv. * argv - element vector : * argv[0] = definition of a user ! * macro or nil if built-in. * argv[1] = name of the macro or * built-in. * argv[2] = parameters to user-defined --- 88,94 ---- * argc - number of elements in argv. * argv - element vector : * argv[0] = definition of a user ! * macro or NULL if built-in. * argv[1] = name of the macro or * built-in. * argv[2] = parameters to user-defined *************** *** 196,202 **** * another definition */ if (argc > 3) { ! if (lookup(argv[2]) != nil) pbstr(argv[3]); else if (argc > 4) pbstr(argv[4]); --- 193,199 ---- * another definition */ if (argc > 3) { ! if (lookup_macro_definition(argv[2]) != NULL) pbstr(argv[3]); else if (argc > 4) pbstr(argv[4]); *************** *** 344,350 **** */ if (argc > 2) for (n = 2; n < argc; n++) ! remhash(argv[n], ALL); break; case POPDTYPE: --- 341,347 ---- */ if (argc > 2) for (n = 2; n < argc; n++) ! macro_undefine(argv[n]); break; case POPDTYPE: *************** *** 355,361 **** */ if (argc > 2) for (n = 2; n < argc; n++) ! remhash(argv[n], TOP); break; case MKTMTYPE: --- 352,358 ---- */ if (argc > 2) for (n = 2; n < argc; n++) ! macro_popdef(argv[n]); break; case MKTMTYPE: *************** *** 563,610 **** /* - * common part to dodefine and dopushdef - */ - static void - setup_definition(ndptr p, const char *defn) - { - int n; - - if (strncmp(defn, BUILTIN_MARKER, sizeof(BUILTIN_MARKER)-1) == 0) { - n = builtin_type(defn+sizeof(BUILTIN_MARKER)-1); - if (n != -1) { - p->type = n & TYPEMASK; - if ((n & NOARGS) == 0) - p->type |= NEEDARGS; - p->defn = xstrdup(defn+sizeof(BUILTIN_MARKER)-1); - return; - } - } - if (!*defn) - p->defn = null; - else - p->defn = xstrdup(defn); - p->type = MACRTYPE; - } - - /* * dodefine - install definition in the table */ void dodefine(const char *name, const char *defn) { - ndptr p; - if (!*name) errx(1, "%s at line %lu: null definition.", CURRENT_NAME, CURRENT_LINE); ! if ((p = lookup(name)) == nil) ! p = addent(name); ! else if (p->defn != null) ! free((char *) p->defn); ! setup_definition(p, defn); ! if (STREQ(name, defn)) ! p->type |= RECDEF; } /* --- 560,574 ---- /* * dodefine - install definition in the table */ void dodefine(const char *name, const char *defn) { if (!*name) errx(1, "%s at line %lu: null definition.", CURRENT_NAME, CURRENT_LINE); ! macro_define(name, defn); } /* *************** *** 614,623 **** static void dodefn(const char *name) { ! ndptr p; char *real; ! if ((p = lookup(name)) != nil) { if ((p->type & TYPEMASK) == MACRTYPE) { pbstr(rquote); pbstr(p->defn); --- 578,587 ---- static void dodefn(const char *name) { ! struct macro_definition *p; char *real; ! if ((p = lookup_macro_definition(name)) != NULL) { if ((p->type & TYPEMASK) == MACRTYPE) { pbstr(rquote); pbstr(p->defn); *************** *** 639,669 **** static void dopushdef(const char *name, const char *defn) { - ndptr p; - if (!*name) errx(1, "%s at line %lu: null definition", CURRENT_NAME, CURRENT_LINE); ! p = addent(name); ! setup_definition(p, defn); ! if (STREQ(name, defn)) ! p->type |= RECDEF; } /* * dump_one_def - dump the specified definition. */ static void ! dump_one_def(ndptr p) { if (mimic_gnu) { if ((p->type & TYPEMASK) == MACRTYPE) ! fprintf(traceout, "%s:\t%s\n", p->name, p->defn); else { ! fprintf(traceout, "%s:\t<%s>\n", p->name, p->defn); } } else ! fprintf(traceout, "`%s'\t`%s'\n", p->name, p->defn); } /* --- 603,628 ---- static void dopushdef(const char *name, const char *defn) { if (!*name) errx(1, "%s at line %lu: null definition", CURRENT_NAME, CURRENT_LINE); ! macro_pushdef(name, defn); } /* * dump_one_def - dump the specified definition. */ static void ! dump_one_def(const char *name, struct macro_definition *p) { if (mimic_gnu) { if ((p->type & TYPEMASK) == MACRTYPE) ! fprintf(traceout, "%s:\t%s\n", name, p->defn); else { ! fprintf(traceout, "%s:\t<%s>\n", name, p->defn); } } else ! fprintf(traceout, "`%s'\t`%s'\n", name, p->defn); } /* *************** *** 675,691 **** dodump(const char *argv[], int argc) { int n; ! ndptr p; if (argc > 2) { for (n = 2; n < argc; n++) ! if ((p = lookup(argv[n])) != nil) ! dump_one_def(p); ! } else { ! for (n = 0; n < HASHSIZE; n++) ! for (p = hashtab[n]; p != nil; p = p->nxtptr) ! dump_one_def(p); ! } } /* --- 634,647 ---- dodump(const char *argv[], int argc) { int n; ! struct macro_definition *p; if (argc > 2) { for (n = 2; n < argc; n++) ! if ((p = lookup_macro_definition(argv[n])) != NULL) ! dump_one_def(argv[n], p); ! } else ! macro_for_all(dump_one_def); } /*