summaryrefslogtreecommitdiff
path: root/gcc/c-family/c-pragma.h
diff options
context:
space:
mode:
authorbstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4>2011-06-20 19:52:08 +0000
committerbstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4>2011-06-20 19:52:08 +0000
commit34bbbb0670a7df57036c2e158857ef655548bca5 (patch)
treea40370cacb124a35a15e8df7766262292b7f292e /gcc/c-family/c-pragma.h
parentefff306159648aee52fe35120a1ee0270034bda0 (diff)
downloadgcc-34bbbb0670a7df57036c2e158857ef655548bca5.tar.gz
2011-06-20 Basile Starynkevitch <basile@starynkevitch.net>
MELT branch merged with trunk rev 175225 using svnmerge. Using c_register_pragma_with_expansion_and_data is now possible... git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/melt-branch@175227 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/c-family/c-pragma.h')
-rw-r--r--gcc/c-family/c-pragma.h38
1 files changed, 34 insertions, 4 deletions
diff --git a/gcc/c-family/c-pragma.h b/gcc/c-family/c-pragma.h
index cec9cd17616..d231c256e46 100644
--- a/gcc/c-family/c-pragma.h
+++ b/gcc/c-family/c-pragma.h
@@ -84,10 +84,40 @@ extern bool pop_visibility (int);
extern void init_pragma (void);
/* Front-end wrappers for pragma registration. */
-typedef void (*pragma_handler)(struct cpp_reader *);
-extern void c_register_pragma (const char *, const char *, pragma_handler);
-extern void c_register_pragma_with_expansion (const char *, const char *,
- pragma_handler);
+typedef void (*pragma_handler_1arg)(struct cpp_reader *);
+/* A second pragma handler, which adds a void * argument allowing to pass extra
+ data to the handler. */
+typedef void (*pragma_handler_2arg)(struct cpp_reader *, void *);
+
+/* This union allows to abstract the different handlers. */
+union gen_pragma_handler {
+ pragma_handler_1arg handler_1arg;
+ pragma_handler_2arg handler_2arg;
+};
+/* Internally used to keep the data of the handler. */
+struct internal_pragma_handler_d {
+ union gen_pragma_handler handler;
+ /* Permits to know if handler is a pragma_handler_1arg (extra_data is false)
+ or a pragma_handler_2arg (extra_data is true). */
+ bool extra_data;
+ /* A data field which can be used when extra_data is true. */
+ void * data;
+};
+typedef struct internal_pragma_handler_d internal_pragma_handler;
+
+extern void c_register_pragma (const char *space, const char *name,
+ pragma_handler_1arg handler);
+extern void c_register_pragma_with_data (const char *space, const char *name,
+ pragma_handler_2arg handler,
+ void *data);
+
+extern void c_register_pragma_with_expansion (const char *space,
+ const char *name,
+ pragma_handler_1arg handler);
+extern void c_register_pragma_with_expansion_and_data (const char *space,
+ const char *name,
+ pragma_handler_2arg handler,
+ void *data);
extern void c_invoke_pragma_handler (unsigned int);
extern void maybe_apply_pragma_weak (tree);