aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>2023-05-30 10:57:01 +0200
committerPhilip Herron <philip.herron@embecosm.com>2023-06-01 15:23:35 +0000
commite26fea0f490162008884e8f010650da2ae5e8d38 (patch)
tree0f5135a61e5ec305c333030ca05cea7d3b7019b3 /gcc
parent3f60f6104a559fc14ccda51157f8db6e43df0d52 (diff)
downloadgcc-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.cc26
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: