summaryrefslogtreecommitdiff
path: root/output.c
diff options
context:
space:
mode:
authorDongHun Kwak <dh0128.kwak@samsung.com>2021-10-01 14:49:00 +0900
committerDongHun Kwak <dh0128.kwak@samsung.com>2021-10-01 14:49:00 +0900
commit6d4e8f00cc3dc57dc942651f813de0a459d0bc7a (patch)
tree9f758d414dbfe163d0c605986a66881f1e467da9 /output.c
parente91be11b4d6e0f1fea3b4db1ef753a8658e670de (diff)
downloadbyacc-6d4e8f00cc3dc57dc942651f813de0a459d0bc7a.tar.gz
byacc-6d4e8f00cc3dc57dc942651f813de0a459d0bc7a.tar.bz2
byacc-6d4e8f00cc3dc57dc942651f813de0a459d0bc7a.zip
Imported Upstream version 20191119upstream/20191119
Diffstat (limited to 'output.c')
-rw-r--r--output.c50
1 files changed, 35 insertions, 15 deletions
diff --git a/output.c b/output.c
index 4f5eacf..d849ceb 100644
--- a/output.c
+++ b/output.c
@@ -1,4 +1,4 @@
-/* $Id: output.c,v 1.90 2019/11/04 02:02:13 tom Exp $ */
+/* $Id: output.c,v 1.92 2019/11/20 00:55:05 tom Exp $ */
#include "defs.h"
@@ -32,16 +32,6 @@ static int lowzero;
static long high;
static void
-output_code_lines(FILE * fp, int cl)
-{
- if (code_lines[cl].lines == NULL)
- return;
- if (fp == code_file)
- outline += (int)code_lines[cl].num;
- fputs(code_lines[cl].lines, fp);
-}
-
-static void
putc_code(FILE * fp, int c)
{
if ((c == '\n') && (fp == code_file))
@@ -196,6 +186,27 @@ output_prefix(FILE * fp)
}
static void
+output_code_lines(FILE * fp, int cl)
+{
+ if (code_lines[cl].lines != NULL)
+ {
+ if (fp == code_file)
+ {
+ outline += (int)code_lines[cl].num;
+ outline += 3;
+ fprintf(fp, "\n");
+ }
+ fprintf(fp, "/* %%code \"%s\" block start */\n", code_lines[cl].name);
+ fputs(code_lines[cl].lines, fp);
+ fprintf(fp, "/* %%code \"%s\" block end */\n", code_lines[cl].name);
+ if (fp == code_file)
+ {
+ write_code_lineno(fp);
+ }
+ }
+}
+
+static void
output_newline(void)
{
if (!rflag)
@@ -1216,6 +1227,11 @@ output_defines(FILE * fp)
int c, i;
char *s;
+ if (fp == defines_file)
+ {
+ output_code_lines(fp, CODE_REQUIRES);
+ }
+
for (i = 2; i < ntokens; ++i)
{
s = symbol_name[i];
@@ -1251,7 +1267,6 @@ output_defines(FILE * fp)
if (fp == defines_file)
{
- output_code_lines(fp, CODE_REQUIRES);
output_code_lines(fp, CODE_PROVIDES);
}
@@ -2038,9 +2053,6 @@ output(void)
else
fp = code_file;
- output_code_lines(code_file, CODE_REQUIRES);
- output_code_lines(code_file, CODE_PROVIDES);
-
output_prefix(fp);
output_pure_parser(fp);
#if defined(YY_NO_LEAKS)
@@ -2100,22 +2112,30 @@ output(void)
output_actions();
free_parser();
output_debug();
+
if (rflag)
{
write_section(code_file, xdecls);
output_YYINT_typedef(code_file);
write_section(code_file, tables);
}
+
write_section(code_file, global_vars);
if (!pure_parser)
{
write_section(code_file, impure_vars);
}
+ output_code_lines(code_file, CODE_REQUIRES);
+
write_section(code_file, hdr_defs);
if (!pure_parser)
{
write_section(code_file, hdr_vars);
}
+
+ output_code_lines(code_file, CODE_PROVIDES);
+ output_code_lines(code_file, CODE_HEADER);
+
output_trailing_text();
#if defined(YYBTYACC)
if (destructor)