aboutsummaryrefslogtreecommitdiff
path: root/libcpp
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2017-06-05 20:53:06 +0000
committerDavid Malcolm <dmalcolm@gcc.gnu.org>2017-06-05 20:53:06 +0000
commit05945a1b8356818a441b3d358c8d803ee52eb778 (patch)
treed602be4faec521df3252fd78c8aaab8cd7f563d7 /libcpp
parent9b972837bd72fc1e709206e19492123a6df2aada (diff)
downloadgcc-05945a1b8356818a441b3d358c8d803ee52eb778.zip
gcc-05945a1b8356818a441b3d358c8d803ee52eb778.tar.gz
gcc-05945a1b8356818a441b3d358c8d803ee52eb778.tar.bz2
libcpp: add callback for comment-handling
gcc/testsuite/ChangeLog: * g++.dg/plugin/comment_plugin.c: New test plugin. * g++.dg/plugin/comments-1.C: New test file. * g++.dg/plugin/plugin.exp (plugin_test_list): Add the above. libcpp/ChangeLog: * include/cpplib.h (struct cpp_callbacks): Add "comment" callback. * lex.c (_cpp_lex_direct): Call the comment callback if non-NULL. From-SVN: r248901
Diffstat (limited to 'libcpp')
-rw-r--r--libcpp/ChangeLog6
-rw-r--r--libcpp/include/cpplib.h9
-rw-r--r--libcpp/lex.c7
3 files changed, 22 insertions, 0 deletions
diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog
index c01ab44..8032d7c 100644
--- a/libcpp/ChangeLog
+++ b/libcpp/ChangeLog
@@ -1,3 +1,9 @@
+2017-06-05 David Malcolm <dmalcolm@redhat.com>
+
+ * include/cpplib.h (struct cpp_callbacks): Add "comment"
+ callback.
+ * lex.c (_cpp_lex_direct): Call the comment callback if non-NULL.
+
2017-05-02 David Malcolm <dmalcolm@redhat.com>
* include/line-map.h (class rich_location): Update description of
diff --git a/libcpp/include/cpplib.h b/libcpp/include/cpplib.h
index b843992..66ef4d6 100644
--- a/libcpp/include/cpplib.h
+++ b/libcpp/include/cpplib.h
@@ -609,6 +609,15 @@ struct cpp_callbacks
/* Callback for providing suggestions for misspelled directives. */
const char *(*get_suggestion) (cpp_reader *, const char *, const char *const *);
+
+ /* Callback for when a comment is encountered, giving the location
+ of the opening slash, a pointer to the content (which is not
+ necessarily 0-terminated), and the length of the content.
+ The content contains the opening slash-star (or slash-slash),
+ and for C-style comments contains the closing star-slash. For
+ C++-style comments it does not include the terminating newline. */
+ void (*comment) (cpp_reader *, source_location, const unsigned char *,
+ size_t);
};
#ifdef VMS
diff --git a/libcpp/lex.c b/libcpp/lex.c
index 9edd2a6..40ff801 100644
--- a/libcpp/lex.c
+++ b/libcpp/lex.c
@@ -2889,6 +2889,13 @@ _cpp_lex_direct (cpp_reader *pfile)
if (fallthrough_comment_p (pfile, comment_start))
fallthrough_comment = true;
+ if (pfile->cb.comment)
+ {
+ size_t len = pfile->buffer->cur - comment_start;
+ pfile->cb.comment (pfile, result->src_loc, comment_start - 1,
+ len + 1);
+ }
+
if (!pfile->state.save_comments)
{
result->flags |= PREV_WHITE;