diff --git a/data/local.mk b/data/local.mk index 50efda39..21106451 100644 --- a/data/local.mk +++ b/data/local.mk @@ -34,6 +34,7 @@ dist_skeletons_DATA = \ data/skeletons/lalr1.java \ data/skeletons/location.cc \ data/skeletons/stack.hh \ + data/skeletons/traceon.m4 \ data/skeletons/variant.hh \ data/skeletons/yacc.c diff --git a/data/skeletons/traceon.m4 b/data/skeletons/traceon.m4 new file mode 100644 index 00000000..344d7d1c --- /dev/null +++ b/data/skeletons/traceon.m4 @@ -0,0 +1,2 @@ +dnl GNU M4 treats -dV in a position-independent manner. +m4_debugmode(V)m4_traceon()dnl diff --git a/src/getargs.c b/src/getargs.c index 6f19a4ea..55884d34 100644 --- a/src/getargs.c +++ b/src/getargs.c @@ -257,7 +257,8 @@ static const argmatch_trace_doc argmatch_trace_docs[] = { "sets", "grammar sets: firsts, nullable etc." }, { "muscles", "m4 definitions passed to the skeleton" }, { "tools", "m4 invocation" }, - { "m4", "m4 traces" }, + { "m4-early", "m4 traces starting from the start" }, + { "m4", "m4 traces starting from the skeleton evaluation" }, { "skeleton", "skeleton postprocessing" }, { "time", "time consumption" }, { "ielr", "IELR conversion" }, @@ -279,6 +280,7 @@ static const argmatch_trace_arg argmatch_trace_args[] = { "sets", trace_sets }, { "muscles", trace_muscles }, { "tools", trace_tools }, + { "m4-early", trace_m4_early }, { "m4", trace_m4 }, { "skeleton", trace_skeleton }, { "time", trace_time }, diff --git a/src/getargs.h b/src/getargs.h index 39741926..c1629ab5 100644 --- a/src/getargs.h +++ b/src/getargs.h @@ -100,11 +100,12 @@ enum trace trace_grammar = 1 << 7, /**< Reading, reducing the grammar. */ trace_time = 1 << 8, /**< Time consumption. */ trace_skeleton = 1 << 9, /**< Skeleton postprocessing. */ - trace_m4 = 1 << 10, /**< M4 traces. */ - trace_muscles = 1 << 11, /**< M4 definitions of the muscles. */ - trace_ielr = 1 << 12, /**< IELR conversion. */ - trace_closure = 1 << 13, /**< Input/output of closure(). */ - trace_locations = 1 << 14, /**< Full display of locations. */ + trace_m4_early = 1 << 10, /**< M4 early traces. */ + trace_m4 = 1 << 11, /**< M4 traces. */ + trace_muscles = 1 << 12, /**< M4 definitions of the muscles. */ + trace_ielr = 1 << 13, /**< IELR conversion. */ + trace_closure = 1 << 14, /**< Input/output of closure(). */ + trace_locations = 1 << 15, /**< Full display of locations. */ trace_all = ~0 /**< All of the above. */ }; /** What debug items bison displays during its run. */ diff --git a/src/output.c b/src/output.c index 5bee092d..e63c3254 100644 --- a/src/output.c +++ b/src/output.c @@ -687,6 +687,7 @@ output_skeleton (void) char *skeldir = xpath_join (datadir, "skeletons"); char *m4sugar = xpath_join (datadir, "m4sugar/m4sugar.m4"); char *m4bison = xpath_join (skeldir, "bison.m4"); + char *traceon = xpath_join (skeldir, "traceon.m4"); char *skel = (IS_PATH_WITH_DIR (skeleton) ? xstrdup (skeleton) : xpath_join (skeldir, skeleton)); @@ -701,7 +702,7 @@ output_skeleton (void) int filter_fd[2]; pid_t pid; { - char const *argv[10]; + char const *argv[11]; int i = 0; argv[i++] = m4; @@ -720,17 +721,16 @@ output_skeleton (void) argv[i++] = "-I"; argv[i++] = datadir; /* Some future version of GNU M4 (most likely 1.6) may treat the - -dV in a position-dependent manner. Keep it as the first - argument so that all files are traced. - - See the thread starting at + -dV in a position-dependent manner. See the thread starting at for details. */ - if (trace_flag & trace_m4) + if (trace_flag & trace_m4_early) argv[i++] = "-dV"; argv[i++] = m4sugar; argv[i++] = "-"; argv[i++] = m4bison; + if (trace_flag & trace_m4) + argv[i++] = traceon; argv[i++] = skel; argv[i++] = NULL; aver (i <= ARRAY_CARDINALITY (argv)); @@ -751,6 +751,7 @@ output_skeleton (void) free (skeldir); free (m4sugar); free (m4bison); + free (traceon); free (skel); if (trace_flag & trace_muscles)