diff options
author | David Malcolm <dmalcolm@redhat.com> | 2017-06-05 20:53:06 +0000 |
---|---|---|
committer | David Malcolm <dmalcolm@gcc.gnu.org> | 2017-06-05 20:53:06 +0000 |
commit | 05945a1b8356818a441b3d358c8d803ee52eb778 (patch) | |
tree | d602be4faec521df3252fd78c8aaab8cd7f563d7 /libcpp | |
parent | 9b972837bd72fc1e709206e19492123a6df2aada (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | libcpp/include/cpplib.h | 9 | ||||
-rw-r--r-- | libcpp/lex.c | 7 |
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; |