aboutsummaryrefslogtreecommitdiff
path: root/boot/symbol.cc
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2026-08-21 00:05:03 +0200
committerEugen Wissner <belka@caraus.de>2026-08-21 00:05:03 +0200
commit39269cc68a32f6e1a7524b00da36a1fe4cc7fb8b (patch)
tree9558cd6107d60e22127faeddbdeac5031ee2fdbe /boot/symbol.cc
parent4f77ad5d019618893c59a0f8d5bfa6b98e50a3be (diff)
downloadelna-39269cc68a32f6e1a7524b00da36a1fe4cc7fb8b.tar.gz
Implement Single and Double floats
Diffstat (limited to 'boot/symbol.cc')
-rw-r--r--boot/symbol.cc39
1 files changed, 30 insertions, 9 deletions
diff --git a/boot/symbol.cc b/boot/symbol.cc
index 05eea31..fdf6a65 100644
--- a/boot/symbol.cc
+++ b/boot/symbol.cc
@@ -326,8 +326,10 @@ namespace elna::boot
const type pointer = type(std::make_shared<primitive_type>("Pointer", target.pointer_properties));
result->enter("Pointer", std::make_shared<type_info>(pointer));
- result->enter("Float",
- std::make_shared<type_info>(type(std::make_shared<primitive_type>("Float", target.float_properties))));
+ result->enter("Single",
+ std::make_shared<type_info>(type(std::make_shared<primitive_type>("Single", target.single_properties))));
+ result->enter("Double",
+ std::make_shared<type_info>(type(std::make_shared<primitive_type>("Double", target.double_properties))));
const type boolean = type(std::make_shared<primitive_type>("Bool", target.bool_properties));
result->enter("Bool", std::make_shared<type_info>(boolean));
@@ -462,22 +464,41 @@ namespace elna::boot
return false;
}
- bool is_numeric_type(const type& checked)
+ bool is_integer_type(const type& checked)
{
- return is_integral_type(checked)
- || is_primitive_type(checked, "Float");
+ if (auto primitive_checked = checked.get<primitive_type>())
+ {
+ return primitive_checked->identifier.starts_with("Int");
+ }
+ return false;
}
- bool is_integral_type(const type& checked)
+ bool is_word_type(const type& checked)
{
if (auto primitive_checked = checked.get<primitive_type>())
{
- return primitive_checked->identifier.starts_with("Int")
- || primitive_checked->identifier.starts_with("Word");
+ return primitive_checked->identifier.starts_with("Word");
}
return false;
}
+ bool is_float_type(const type& checked)
+ {
+ return is_primitive_type(checked, "Single")
+ || is_primitive_type(checked, "Double");
+ }
+
+ bool is_numeric_type(const type& checked)
+ {
+ return is_integral_type(checked)
+ || is_float_type(checked);
+ }
+
+ bool is_integral_type(const type& checked)
+ {
+ return is_integer_type(checked) || is_word_type(checked);
+ }
+
bool is_discrete_type(const type& checked)
{
return is_integral_type(checked)
@@ -495,7 +516,7 @@ namespace elna::boot
bool is_scalar_type(const type& checked)
{
return is_discrete_type(checked)
- || is_primitive_type(checked, "Float")
+ || is_float_type(checked)
|| is_any_pointer_type(checked)
|| checked.get<enumeration_type>() != nullptr;
}