From bb34acfcfdf6e7c9911924043230bb6b7037ef0c Mon Sep 17 00:00:00 2001 From: Akemi Izuko Date: Sat, 18 Nov 2023 00:49:26 -0700 Subject: [PATCH] Ast: fix big float prints --- params.toml | 4 ++-- src/ast/expr.rs | 14 +++++++++++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/params.toml b/params.toml index a9c872f..7253a3a 100644 --- a/params.toml +++ b/params.toml @@ -1,7 +1,7 @@ [global_flow] - gen_decl = 0.5 + gen_decl = 0.6 gen_subroutine = 0.0 - gen_typedef = 0.4 + gen_typedef = 0.3 end_generation = 0.1 [statements] diff --git a/src/ast/expr.rs b/src/ast/expr.rs index 48f7908..80be477 100644 --- a/src/ast/expr.rs +++ b/src/ast/expr.rs @@ -56,7 +56,19 @@ impl ToString for Literal { fn to_string(&self) -> String { match *self { Literal::Int(x) => x.to_string(), - Literal::Real(x) => x.to_string(), + Literal::Real(x) => { + let mut s = x.to_string(); + let nb_zeros = s.chars().rev().position(|x| x != '0').unwrap_or(0); + + if nb_zeros > 3 { + s = String::from(&s[..s.len()-nb_zeros]); + s.push('e'); + s.push('+'); + s.push_str(&nb_zeros.to_string()); + } + + s + } } } }