summaryrefslogtreecommitdiff
path: root/vala/valarealliteral.vala
diff options
context:
space:
mode:
authorwszqkzqk <wszqkzqk@qq.com>2022-12-09 20:07:59 +0800
committerRico Tzschichholz <ricotz@ubuntu.com>2023-01-30 15:04:26 +0100
commit54ca3c304d252eda7fe7ee50014ca28a3b68dd19 (patch)
treed0d1e349b70e1228a66c984c5a1e9d2b72e35fc6 /vala/valarealliteral.vala
parent760e1041346593bec39897b21eb965f8d1f7dbd2 (diff)
downloadvala-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.vala27
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);