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> | 2023-05-11 09:38:21 +0200 |
commit | a841180b026fd6e33733ea8c0f39d47a8eaf1f8d (patch) | |
tree | 9f518d1cf1c3fde7e0c84bf3ab099141253b92ff | |
parent | 96ed2e8e19ed41dc70bf12acb503a952cf8d9c3c (diff) | |
download | gcc-a841180b026fd6e33733ea8c0f39d47a8eaf1f8d.zip gcc-a841180b026fd6e33733ea8c0f39d47a8eaf1f8d.tar.gz gcc-a841180b026fd6e33733ea8c0f39d47a8eaf1f8d.tar.bz2 |
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>
-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; |