From 4d950fa5dfca0aa526a5d5e72f353b4a46cfb1e4 Mon Sep 17 00:00:00 2001 From: Pierre-Emmanuel Patry Date: Tue, 30 May 2023 10:57:01 +0200 Subject: gccrs: 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. libgrust/ChangeLog: * libproc_macro/Makefile.am: Add span.cc * libproc_macro/Makefile.in: Regenerate. * libproc_macro/span.cc: New file. * libproc_macro/span.h: New file. * libproc_macro/group.cc (Group::make_group): Add span argument. * libproc_macro/group.h (GROUP_H): Add include directive for spans. * libproc_macro/ident.cc (Ident__new): Add span argument. (Ident__new_raw): Likewise. (Ident::make_ident): Likewise. * libproc_macro/ident.h (Ident__new): Likewise. (Ident__new_raw): Likewise. * 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. * libproc_macro/literal.h (struct Literal): Add span to Literal structure. * libproc_macro/punct.cc (Punct::make_punct): Add span argument to punct constructor. * libproc_macro/punct.h (struct Punct): Add span to Punct structure. Signed-off-by: Pierre-Emmanuel Patry --- gcc/rust/util/rust-token-converter.cc | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) (limited to 'gcc') 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 &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 &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 &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 &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 &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: -- cgit v1.1