summaryrefslogtreecommitdiff
path: root/gcc/make-cc1.com
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1992-10-13 18:35:12 +0000
committerRichard Stallman <rms@gnu.org>1992-10-13 18:35:12 +0000
commit2988e8a39e50f3acb58b82c8bca8f06b5d2562a9 (patch)
treee22c649e9edaf9499f264a892e26c22109f32b21 /gcc/make-cc1.com
parentcab554610be863878e01ceacee6c8360c8e48d7b (diff)
downloadgcc-2988e8a39e50f3acb58b82c8bca8f06b5d2562a9.tar.gz
Simplify extraction of YYEMPTY from cp-parse.c.
Generate c-parse.y, objc-parse.y from c-parse.in if required. From-SVN: r2439
Diffstat (limited to 'gcc/make-cc1.com')
-rw-r--r--gcc/make-cc1.com79
1 files changed, 68 insertions, 11 deletions
diff --git a/gcc/make-cc1.com b/gcc/make-cc1.com
index cddfdfd32fa..14838f24414 100644
--- a/gcc/make-cc1.com
+++ b/gcc/make-cc1.com
@@ -22,6 +22,7 @@ $! CC := cc !uncomment for VAXC
$ BISON := bison
$ RENAME := rename/new_vers
$ LINK := link
+$ EDIT := edit
$!
$! Compiler options
$!
@@ -180,6 +181,67 @@ $!'f$verify(0)
$ endif
$!
$compile_cc1:
+$if (DO_CC1 + DO_CC1PLUS) .ne.0
+$ then
+$write sys$output "testing"
+$if (f$search("C-PARSE.Y") .eqs. "") then goto yes_yfiles
+$if (f$cvtime(f$file_attributes("C-PARSE.IN","RDT")).gts. -
+ f$cvtime(f$file_attributes("C-PARSE.Y","RDT"))) -
+ then goto yes_yfiles
+$if (f$search("OBJC-PARSE.Y") .eqs. "") then goto yes_yfiles
+$if (f$cvtime(f$file_attributes("C-PARSE.IN","RDT")).gts. -
+ f$cvtime(f$file_attributes("OBJC-PARSE.Y","RDT"))) -
+ then goto yes_yfiles
+$GOTO no_yfiles
+$echo "Now processing c-parse.in to generate c-parse.y and objc-parse.y."
+$yes_yfiles:
+$ edit/tpu/nojournal/nosection/nodisplay/command=sys$input
+!
+! Read c-parse.in, write c-parse.y and objc-parse.y, depending on
+! paired lines of "ifc" & "end ifc" and "ifobjc" & "end ifobjc" to
+! control what goes into each file. Most lines will be common to
+! both (hence not bracketed by either control pair). Mismatched
+! pairs aren't detected--garbage in, garbage out...
+!
+
+ PROCEDURE do_output()
+ IF NOT objc_only THEN POSITION(END_OF(c)); COPY_TEXT(input_line); ENDIF;
+ IF NOT c_only THEN POSITION(END_OF(objc)); COPY_TEXT(input_line); ENDIF;
+ POSITION(input_file); !reset
+ ENDPROCEDURE;
+
+ input_file := CREATE_BUFFER("input", "c-parse.in"); !load data
+ SET(NO_WRITE, input_file);
+ c := CREATE_BUFFER("c_output"); !1st output file
+ objc := CREATE_BUFFER("objc_output"); !2nd output file
+
+ POSITION(BEGINNING_OF(input_file));
+ c_only := 0;
+ objc_only := 0;
+
+ LOOP
+ EXITIF MARK(NONE) = END_OF(input_file); !are we done yet?
+
+ input_line := CURRENT_LINE; !access current_line just once
+ CASE EDIT(input_line, TRIM_TRAILING, OFF, NOT_IN_PLACE)
+ ["ifc"] : c_only := 1;
+ ["end ifc"] : c_only := 0;
+ ["ifobjc"] : objc_only := 1;
+ ["end ifobjc"] : objc_only := 0;
+! default -- add non-control line to either or both output files
+ [INRANGE] : do_output(); !between "end" and "if"
+ [OUTRANGE] : do_output(); !before "end" or after "if"
+ ENDCASE;
+
+ MOVE_VERTICAL(1); !go to next line
+ ENDLOOP;
+
+ WRITE_FILE(c, "c-parse.y");
+ WRITE_FILE(objc, "objc-parse.y");
+ QUIT
+$ endif
+$no_yfiles:
+$!
$open cfile$ compilers.list
$cloop:read cfile$ compilername/end=cdone
$! language specific modules
@@ -241,17 +303,12 @@ $set verify
$ 'BISON' /define /verbose 'flnm'.y
$ 'RENAME' 'flnm'_tab.c 'flnm'.c
$ 'RENAME' 'flnm'_tab.h 'flnm'.h
-$ if flnm.eqs."cp-parse"
-$ then
-$ search cp-parse.c "#define YYEMPTY"/output=t.tmp
-$ open jfile$ t.tmp
-$ read jfile$ empty_line
-$ close jfile$
-$ open jfile$ cp-parse.h/append
-$ write jfile$ empty_line
-$ close jfile$
-$ delete/nolog t.tmp;
-$ endif
+$ if flnm.eqs."cp-parse"
+$ then ! fgrep '#define YYEMPTY' cp-parse.c >>cp-parse.h
+$ open/append jfile$ cp-parse.h
+$ search/exact/output=jfile$ cp-parse.c "#define YYEMPTY"
+$ close jfile$
+$ endif
$!'f$verify(0)
$no_bison:
$ endif