summaryrefslogtreecommitdiffstats
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog13
-rw-r--r--gcc/cppinit.c6
-rw-r--r--gcc/cpplib.c33
-rw-r--r--gcc/cpplib.h48
-rw-r--r--gcc/cppmain.c2
5 files changed, 83 insertions, 19 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f15a563ed98..a5c8380a767 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,16 @@
+2001-01-13 Neil Booth <neil@daikokuya.demon.co.uk>
+
+ * cppinit.c (cpp_handle_option): help_only is now part of the
+ cpp_options structure.
+ * cpplib.c (cpp_errors, cpp_get_options, cpp_get_callbacks,
+ cpp_set_callbacks): New functions.
+ * cpplib.h (cpp_callbacks): Break out as a named structure.
+ (cpp_options): Move help_only here from cpp_reader.
+ (CPP_FATAL_ERRORS): Update to use cpp_errors.
+ (cpp_errors, cpp_get_options, cpp_get_callbacks,
+ cpp_set_callbacks): New prototypes.
+ * cppmain.c (main): Update for help_only.
+
2001-01-13 Joseph S. Myers <jsm28@cam.ac.uk>
* Makefile.in (info, maintainer-clean, install-info, uninstall):
diff --git a/gcc/cppinit.c b/gcc/cppinit.c
index 50896b88809..c3347c94d71 100644
--- a/gcc/cppinit.c
+++ b/gcc/cppinit.c
@@ -1290,18 +1290,18 @@ cpp_handle_option (pfile, argc, argv)
case OPT_h:
case OPT__help:
print_help ();
- pfile->help_only = 1;
+ CPP_OPTION (pfile, help_only) = 1;
break;
case OPT_target__help:
/* Print if any target specific options. cpplib has none, but
make sure help_only gets set. */
- pfile->help_only = 1;
+ CPP_OPTION (pfile, help_only) = 1;
break;
/* --version inhibits compilation, -version doesn't. -v means
verbose and -version. Historical reasons, don't ask. */
case OPT__version:
- pfile->help_only = 1;
+ CPP_OPTION (pfile, help_only) = 1;
goto version;
case OPT_v:
CPP_OPTION (pfile, verbose) = 1;
diff --git a/gcc/cpplib.c b/gcc/cpplib.c
index c915f774540..20641200ec9 100644
--- a/gcc/cpplib.c
+++ b/gcc/cpplib.c
@@ -1714,6 +1714,39 @@ handle_assertion (pfile, str, type)
run_directive (pfile, type, BUF_CL_OPTION, str, count);
}
+/* The number of errors for a given reader. */
+unsigned int
+cpp_errors (pfile)
+ cpp_reader *pfile;
+{
+ return pfile->errors;
+}
+
+/* The options structure. */
+cpp_options *
+cpp_get_options (pfile)
+ cpp_reader *pfile;
+{
+ return &pfile->opts;
+}
+
+/* The callbacks structure. */
+cpp_callbacks *
+cpp_get_callbacks (pfile)
+ cpp_reader *pfile;
+{
+ return &pfile->cb;
+}
+
+/* Copy the given callbacks structure to our own. */
+void
+cpp_set_callbacks (pfile, cb)
+ cpp_reader *pfile;
+ cpp_callbacks *cb;
+{
+ pfile->cb = *cb;
+}
+
/* Push a new buffer on the buffer stack. Returns the new buffer; it
doesn't fail. It does not generate a file change call back; that
is the responsibility of the caller. */
diff --git a/gcc/cpplib.h b/gcc/cpplib.h
index bbfb48c2790..f5121da10b7 100644
--- a/gcc/cpplib.h
+++ b/gcc/cpplib.h
@@ -42,6 +42,7 @@ typedef struct cpp_pool cpp_pool;
typedef struct cpp_macro cpp_macro;
typedef struct cpp_lexer_pos cpp_lexer_pos;
typedef struct cpp_lookahead cpp_lookahead;
+typedef struct cpp_callbacks cpp_callbacks;
struct directive; /* These are deliberately incomplete. */
struct answer;
@@ -419,6 +420,11 @@ struct cpp_options
/* Treat C++ alternate operator names special. */
unsigned char operator_names;
+
+ /* True if --help, --version or --target-help appeared in the
+ options. Stand-alone CPP should then bail out after option
+ parsing; drivers might want to continue printing help. */
+ unsigned char help_only;
};
struct lexer_state
@@ -485,6 +491,19 @@ struct cpp_file_change
unsigned char externc; /* Nonzero if wrapper needed. */
};
+/* Call backs. */
+struct cpp_callbacks
+{
+ void (*file_change) PARAMS ((cpp_reader *, const cpp_file_change *));
+ void (*include) PARAMS ((cpp_reader *, const unsigned char *,
+ const cpp_token *));
+ void (*define) PARAMS ((cpp_reader *, cpp_hashnode *));
+ void (*undef) PARAMS ((cpp_reader *, cpp_hashnode *));
+ void (*poison) PARAMS ((cpp_reader *));
+ void (*ident) PARAMS ((cpp_reader *, const cpp_string *));
+ void (*def_pragma) PARAMS ((cpp_reader *));
+};
+
/* A cpp_reader encapsulates the "state" of a pre-processor run.
Applying cpp_get_token repeatedly yields a stream of pre-processor
tokens. Usually, there is only one cpp_reader object active. */
@@ -581,16 +600,7 @@ struct cpp_reader
struct pragma_entry *pragmas;
/* Call backs. */
- struct {
- void (*file_change) PARAMS ((cpp_reader *, const cpp_file_change *));
- void (*include) PARAMS ((cpp_reader *, const unsigned char *,
- const cpp_token *));
- void (*define) PARAMS ((cpp_reader *, cpp_hashnode *));
- void (*undef) PARAMS ((cpp_reader *, cpp_hashnode *));
- void (*poison) PARAMS ((cpp_reader *));
- void (*ident) PARAMS ((cpp_reader *, const cpp_string *));
- void (*def_pragma) PARAMS ((cpp_reader *));
- } cb;
+ struct cpp_callbacks cb;
/* User visible options. */
struct cpp_options opts;
@@ -608,15 +618,11 @@ struct cpp_reader
/* True if we are skipping a failed conditional group. */
unsigned char skipping;
-
- /* True if --help appeared in the options. Caller should then bail
- out after option parsing and printing its own help. See cppmain.c. */
- unsigned char help_only;
};
#define CPP_FATAL_LIMIT 1000
/* True if we have seen a "fatal" error. */
-#define CPP_FATAL_ERRORS(READER) ((READER)->errors >= CPP_FATAL_LIMIT)
+#define CPP_FATAL_ERRORS(PFILE) (cpp_errors (PFILE) >= CPP_FATAL_LIMIT)
#define CPP_OPTION(PFILE, OPTION) ((PFILE)->opts.OPTION)
#define CPP_BUFFER(PFILE) ((PFILE)->buffer)
@@ -699,6 +705,15 @@ struct cpp_hashnode
/* Call this first to get a handle to pass to other functions. */
extern cpp_reader *cpp_create_reader PARAMS ((enum c_lang));
+/* Call these to get pointers to the options and callback structures
+ for a given reader. These pointers are good until you call
+ cpp_finish on that reader. You can either edit the callbacks
+ through the pointer returned from cpp_get_callbacks, or set them
+ with cpp_set_callbacks. */
+extern cpp_options *cpp_get_options PARAMS ((cpp_reader *));
+extern cpp_callbacks *cpp_get_callbacks PARAMS ((cpp_reader *));
+extern void cpp_set_callbacks PARAMS ((cpp_reader *, cpp_callbacks *));
+
/* Now call cpp_handle_option[s] to handle 1[or more] switches. The
return value is the number of arguments used. If
cpp_handle_options returns without using all arguments, it couldn't
@@ -710,6 +725,9 @@ extern int cpp_handle_options PARAMS ((cpp_reader *, int, char **));
extern int cpp_handle_option PARAMS ((cpp_reader *, int, char **));
extern void cpp_post_options PARAMS ((cpp_reader *));
+/* Error count. */
+extern unsigned int cpp_errors PARAMS ((cpp_reader *));
+
extern unsigned int cpp_token_len PARAMS ((const cpp_token *));
extern unsigned char *cpp_token_as_text PARAMS ((cpp_reader *,
const cpp_token *));
diff --git a/gcc/cppmain.c b/gcc/cppmain.c
index dbb86ea97c8..9ef01f5ef83 100644
--- a/gcc/cppmain.c
+++ b/gcc/cppmain.c
@@ -87,7 +87,7 @@ main (argc, argv)
line, it will have set pfile->help_only to indicate this. Exit
successfully. [The library does not exit itself, because
e.g. cc1 needs to print its own --help message at this point.] */
- if (pfile->help_only)
+ if (CPP_OPTION (pfile, help_only))
return (SUCCESS_EXIT_CODE);
/* Open the output now. We must do so even if no_output is on,
OpenPOWER on IntegriCloud