diff options
author | Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com> | 2023-05-30 10:57:01 +0200 |
---|---|---|
committer | Philip Herron <philip.herron@embecosm.com> | 2023-06-01 15:23:35 +0000 |
commit | e26fea0f490162008884e8f010650da2ae5e8d38 (patch) | |
tree | 0f5135a61e5ec305c333030ca05cea7d3b7019b3 /gcc | |
parent | 3f60f6104a559fc14ccda51157f8db6e43df0d52 (diff) | |
download | gcc-e26fea0f490162008884e8f010650da2ae5e8d38.zip gcc-e26fea0f490162008884e8f010650da2ae5e8d38.tar.gz gcc-e26fea0f490162008884e8f010650da2ae5e8d38.tar.bz2 |
libproc_macro: Add cpp Span representation
Add Span representation in libproc_macro cpp part of the library.
Integrate spans to existing types.
gcc/rust/ChangeLog:
* util/rust-token-converter.cc (convert): Update call to
constructors with location information.
(handle_suffix): Convert token locus to a Span and use it in the
literal.
ChangeLog:
* libgrust/libproc_macro/Makefile.am: Add span.cc
* libgrust/libproc_macro/Makefile.in: Regenerate.
* libgrust/libproc_macro/span.cc: New file.
* libgrust/libproc_macro/span.h: New file.
* libgrust/libproc_macro/group.cc (Group::make_group): Add span
argument.
* libgrust/libproc_macro/group.h (GROUP_H): Add include
directive for spans.
* libgrust/libproc_macro/ident.cc (Ident__new): Add span
argument.
(Ident__new_raw): Likewise.
(Ident::make_ident): Likewise.
* libgrust/libproc_macro/ident.h (Ident__new): Likewise.
(Ident__new_raw): Likewise.
* libgrust/libproc_macro/literal.cc (Literal::clone): Clone the
span.
(Literal::make_literal): Add span argument.
(Literal::make_u8): Likewise.
(Literal::make_u16): Likewise.
(Literal::make_u32): Likewise.
(Literal::make_u64): Likewise.
(Literal::make_i8): Likewise.
(Literal::make_i16): Likewise.
(Literal::make_i32): Likewise.
(Literal::make_i64): Likewise.
(Literal::make_string): Likewise.
(Literal::make_byte_string): Likewise.
(Literal::make_f32): Likewise.
(Literal::make_f64): Likewise.
(Literal::make_char): Likewise.
(Literal::make_usize): Likewise.
(Literal::make_isize): Likewise.
* libgrust/libproc_macro/literal.h (struct Literal): Add span to
Literal structure.
* libgrust/libproc_macro/punct.cc (Punct::make_punct): Add span
argument to punct constructor.
* libgrust/libproc_macro/punct.h (struct Punct): Add span to
Punct structure.
Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/rust/util/rust-token-converter.cc | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/gcc/rust/util/rust-token-converter.cc b/gcc/rust/util/rust-token-converter.cc index 871c8e0..a50d721 100644 --- a/gcc/rust/util/rust-token-converter.cc +++ b/gcc/rust/util/rust-token-converter.cc @@ -50,6 +50,12 @@ pop_group (std::vector<ProcMacro::TokenStream> &streams, streams.back ().push (tt); } +static ProcMacro::Span +convert (Location location) +{ + return ProcMacro::Span::make_unknown (); +} + static void handle_suffix (ProcMacro::TokenStream &ts, const const_TokenPtr &token, ProcMacro::LitKind kind) @@ -58,7 +64,8 @@ handle_suffix (ProcMacro::TokenStream &ts, const const_TokenPtr &token, auto lookup = suffixes.lookup (token->get_type_hint ()); auto suffix = suffixes.is_iter_ok (lookup) ? lookup->second : ""; ts.push (ProcMacro::TokenTree::make_tokentree ( - ProcMacro::Literal::make_literal (kind, str, suffix))); + ProcMacro::Literal::make_literal (kind, convert (token->get_locus ()), str, + suffix))); } ProcMacro::TokenStream @@ -82,22 +89,26 @@ convert (const std::vector<const_TokenPtr> &tokens) case CHAR_LITERAL: trees.back ().push (ProcMacro::TokenTree::make_tokentree ( ProcMacro::Literal::make_literal (ProcMacro::LitKind::make_char (), + convert (token->get_locus ()), token->as_string ()))); break; case STRING_LITERAL: trees.back ().push (ProcMacro::TokenTree::make_tokentree ( ProcMacro::Literal::make_literal (ProcMacro::LitKind::make_str (), + convert (token->get_locus ()), token->as_string ()))); break; case BYTE_CHAR_LITERAL: trees.back ().push (ProcMacro::TokenTree::make_tokentree ( ProcMacro::Literal::make_literal (ProcMacro::LitKind::make_byte (), + convert (token->get_locus ()), token->as_string ()))); break; case BYTE_STRING_LITERAL: trees.back ().push (ProcMacro::TokenTree::make_tokentree ( ProcMacro::Literal::make_literal ( - ProcMacro::LitKind::make_byte_str (), token->as_string ()))); + ProcMacro::LitKind::make_byte_str (), + convert (token->get_locus ()), token->as_string ()))); break; // Ident case IDENTIFIER: @@ -157,7 +168,8 @@ convert (const std::vector<const_TokenPtr> &tokens) case FALSE_LITERAL: case TRUE_LITERAL: trees.back ().push (ProcMacro::TokenTree::make_tokentree ( - ProcMacro::Ident::make_ident (token->as_string ()))); + ProcMacro::Ident::make_ident (token->as_string (), + convert (token->get_locus ())))); break; // Joint punct case OR: @@ -188,9 +200,12 @@ convert (const std::vector<const_TokenPtr> &tokens) auto it = str.cbegin (); for (; it != str.cend () - 1; it++) trees.back ().push (ProcMacro::TokenTree::make_tokentree ( - ProcMacro::Punct::make_punct (*it, ProcMacro::JOINT))); + ProcMacro::Punct::make_punct (*it, + convert (token->get_locus ()), + ProcMacro::JOINT))); trees.back ().push (ProcMacro::TokenTree::make_tokentree ( - ProcMacro::Punct::make_punct (*it, ProcMacro::ALONE))); + ProcMacro::Punct::make_punct (*it, convert (token->get_locus ()), + ProcMacro::ALONE))); } break; // Alone punct tokens @@ -218,6 +233,7 @@ convert (const std::vector<const_TokenPtr> &tokens) case SINGLE_QUOTE: trees.back ().push (ProcMacro::TokenTree::make_tokentree ( ProcMacro::Punct::make_punct (token->as_string ()[0], + convert (token->get_locus ()), ProcMacro::ALONE))); break; case RIGHT_PAREN: |