From eb95910feee269f71cb4ab4aafbf1beecb2f9993 Mon Sep 17 00:00:00 2001 From: Pierre-Emmanuel Patry Date: Fri, 28 Apr 2023 15:07:33 +0200 Subject: [PATCH] gccrs: tokenstream: Add conversion for float literals Add the conversion handler for float/double literal tokens to tokenstream Literals. gcc/rust/ChangeLog: * ast/rust-ast-tokenstream.cc (dispatch_float_literals): Add dispatch function for floating point literals. (TokenStream::collect): Add call to dispatcher. Signed-off-by: Pierre-Emmanuel Patry --- gcc/rust/ast/rust-ast-tokenstream.cc | 29 ++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/gcc/rust/ast/rust-ast-tokenstream.cc b/gcc/rust/ast/rust-ast-tokenstream.cc index d77c1cf41492..0a28081e0bda 100644 --- a/gcc/rust/ast/rust-ast-tokenstream.cc +++ b/gcc/rust/ast/rust-ast-tokenstream.cc @@ -41,6 +41,32 @@ pop_group (std::vector &streams, streams.back ().push (tt); } +static void +dispatch_float_literals (ProcMacro::TokenStream &ts, TokenPtr &token) +{ + std::string::size_type sz; + auto str = token->as_string (); + switch (token->get_type_hint ()) + { + case CORETYPE_F32: { + auto value = std::stof (str, &sz); + bool suffixed = sz == str.length (); + ts.push (ProcMacro::TokenTree::make_tokentree ( + ProcMacro::Literal::make_f32 (value, suffixed))); + } + break; + case CORETYPE_F64: { + auto value = std::stod (str, &sz); + bool suffixed = sz == str.length (); + ts.push (ProcMacro::TokenTree::make_tokentree ( + ProcMacro::Literal::make_f64 (value, suffixed))); + } + break; + default: + gcc_unreachable (); + } +} + static void dispatch_integer_literals (ProcMacro::TokenStream &ts, TokenPtr &token) { @@ -134,6 +160,9 @@ TokenStream::collect () const switch (token->get_id ()) { // Literals + case FLOAT_LITERAL: + dispatch_float_literals (trees.back (), token); + break; case INT_LITERAL: dispatch_integer_literals (trees.back (), token); break; -- 2.43.5