- /* Rules. */
- MUSCLE_INSERT_INT ("rules_number", nrules);
-
- /* States. */
- MUSCLE_INSERT_INT ("last", high);
- MUSCLE_INSERT_INT ("final_state_number", final_state->number);
- MUSCLE_INSERT_INT ("states_number", nstates);
-
- /* User Code. */
- obstack_1grow (&pre_prologue_obstack, 0);
- obstack_1grow (&post_prologue_obstack, 0);
- muscle_insert ("pre_prologue", obstack_finish (&pre_prologue_obstack));
- muscle_insert ("post_prologue", obstack_finish (&post_prologue_obstack));
-
- /* Find the right skeleton file. */
- if (!skeleton)
- {
- if (glr_parser)
- skeleton = "glr.c";
- else
- skeleton = "yacc.c";
- }
-
- /* Parse the skeleton file and output the needed parsers. */
- MUSCLE_INSERT_STRING ("skeleton", skeleton);
+ /* Flags. */
+ MUSCLE_INSERT_BOOL ("debug_flag", debug_flag);
+ MUSCLE_INSERT_BOOL ("defines_flag", defines_flag);
+ MUSCLE_INSERT_BOOL ("error_verbose_flag", error_verbose);
+ MUSCLE_INSERT_BOOL ("glr_flag", glr_parser);
+ MUSCLE_INSERT_BOOL ("locations_flag", locations_flag);
+ MUSCLE_INSERT_BOOL ("nondeterministic_flag", nondeterministic_parser);
+ MUSCLE_INSERT_BOOL ("pull_flag", pull_parser);
+ MUSCLE_INSERT_BOOL ("pure_flag", pure_parser);
+ MUSCLE_INSERT_BOOL ("push_flag", push_parser);
+ MUSCLE_INSERT_BOOL ("synclines_flag", !no_lines_flag);
+ MUSCLE_INSERT_BOOL ("tag_seen_flag", tag_seen);
+ MUSCLE_INSERT_BOOL ("use_push_for_pull_flag", use_push_for_pull_flag);
+ MUSCLE_INSERT_BOOL ("yacc_flag", yacc_flag);
+
+ /* File names. */
+ if (spec_name_prefix)
+ MUSCLE_INSERT_STRING ("prefix", spec_name_prefix);
+
+ MUSCLE_INSERT_STRING ("file_name_all_but_ext", all_but_ext);
+
+#define DEFINE(Name) MUSCLE_INSERT_STRING (#Name, Name ? Name : "")
+ DEFINE (dir_prefix);
+ DEFINE (parser_file_name);
+ DEFINE (spec_defines_file);
+ DEFINE (spec_file_prefix);
+ DEFINE (spec_graph_file);
+ DEFINE (spec_name_prefix);
+ DEFINE (spec_outfile);
+ DEFINE (spec_verbose_file);
+#undef DEFINE
+
+ /* Find the right skeleton file, and add muscles about the skeletons. */
+ if (skeleton)
+ MUSCLE_INSERT_C_STRING ("skeleton", skeleton);
+ else
+ skeleton = language->skeleton;
+
+ /* About the skeletons. */
+ {
+ char const *pkgdatadir = getenv ("BISON_PKGDATADIR");
+ /* b4_pkgdatadir is used inside m4_include in the skeletons, so digraphs
+ would never be expanded. Hopefully no one has M4-special characters in
+ his Bison installation path. */
+ MUSCLE_INSERT_STRING_RAW ("pkgdatadir",
+ pkgdatadir ? pkgdatadir : PKGDATADIR);
+ }