diff options
author | wszqkzqk <wszqkzqk@qq.com> | 2022-12-09 20:07:59 +0800 |
---|---|---|
committer | Rico Tzschichholz <ricotz@ubuntu.com> | 2023-01-30 15:04:26 +0100 |
commit | 54ca3c304d252eda7fe7ee50014ca28a3b68dd19 (patch) | |
tree | d0d1e349b70e1228a66c984c5a1e9d2b72e35fc6 /vala/valarealliteral.vala | |
parent | 760e1041346593bec39897b21eb965f8d1f7dbd2 (diff) | |
download | vala-54ca3c304d252eda7fe7ee50014ca28a3b68dd19.tar.gz |
vala: Add support for Hexadecimal floating point literals
https://gcc.gnu.org/onlinedocs/gcc/Hex-Floats.html#Hex-Floats
Diffstat (limited to 'vala/valarealliteral.vala')
-rw-r--r-- | vala/valarealliteral.vala | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/vala/valarealliteral.vala b/vala/valarealliteral.vala index 86e7cf5c1..07d28dbe8 100644 --- a/vala/valarealliteral.vala +++ b/vala/valarealliteral.vala @@ -65,15 +65,34 @@ public class Vala.RealLiteral : Literal { checked = true; string type_name; - if (value.has_suffix ("f") || value.has_suffix ("F")) { - type_name ="float"; - } else { + int suf_len = 0; + + switch (value[value.length - 1]) { + case 'f': + case 'F': + suf_len = 1; + type_name = "float"; + break; + case 'd': + case 'D': + suf_len = 1; type_name = "double"; + break; + default: + type_name = "double"; + break; } - if (value.has_suffix ("e") || value.has_suffix ("E") || value.has_suffix ("+") || value.has_suffix ("-")) { + switch (value[value.length - suf_len - 1]) { + case 'e': + case 'E': + case 'p': + case 'P': + case '+': + case '-': Report.error (source_reference, "exponent has no digits"); error = true; + break; } var st = (Struct) context.root.scope.lookup (type_name); |