diff options
author | Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com> | 2023-04-28 15:07:33 +0200 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2024-01-16 18:37:16 +0100 |
commit | eb95910feee269f71cb4ab4aafbf1beecb2f9993 (patch) | |
tree | dd4a5304e84ef1d61595acf963397a7a9f82c9aa /gcc/rust | |
parent | a21a4bc8947b628512db2fa00cdbcea883f31deb (diff) | |
download | gcc-eb95910feee269f71cb4ab4aafbf1beecb2f9993.zip gcc-eb95910feee269f71cb4ab4aafbf1beecb2f9993.tar.gz gcc-eb95910feee269f71cb4ab4aafbf1beecb2f9993.tar.bz2 |
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 <pierre-emmanuel.patry@embecosm.com>
Diffstat (limited to 'gcc/rust')
-rw-r--r-- | gcc/rust/ast/rust-ast-tokenstream.cc | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/gcc/rust/ast/rust-ast-tokenstream.cc b/gcc/rust/ast/rust-ast-tokenstream.cc index d77c1cf..0a28081 100644 --- a/gcc/rust/ast/rust-ast-tokenstream.cc +++ b/gcc/rust/ast/rust-ast-tokenstream.cc @@ -42,6 +42,32 @@ pop_group (std::vector<ProcMacro::TokenStream> &streams, } 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) { std::string::size_type sz; @@ -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; |