diff options
| author | Eugen Wissner <belka@caraus.de> | 2026-07-20 16:09:24 +0200 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2026-07-20 16:09:24 +0200 |
| commit | 6b131c925dee7a5f97516edd581e051e08bb52d8 (patch) | |
| tree | 680ae83121442f777e03aa0a0d1299cc364b95dd /boot | |
| parent | cbbe1593bb0893654bd71e611ca610df03bac768 (diff) | |
| download | elna-6b131c925dee7a5f97516edd581e051e08bb52d8.tar.gz | |
Implement min and max for booleans and floats
Diffstat (limited to 'boot')
| -rw-r--r-- | boot/evaluator.cc | 16 | ||||
| -rw-r--r-- | boot/name_analysis.cc | 5 |
2 files changed, 19 insertions, 2 deletions
diff --git a/boot/evaluator.cc b/boot/evaluator.cc index b7edd3a..7eb612b 100644 --- a/boot/evaluator.cc +++ b/boot/evaluator.cc @@ -534,6 +534,14 @@ namespace elna::boot { return constant_value{ static_cast<unsigned char>(0) }; } + if (is_primitive_type(resolved, "Bool")) + { + return constant_value{ false }; + } + if (is_primitive_type(resolved, "Float")) + { + return constant_value{ -std::numeric_limits<double>::max() }; + } if (auto enumeration = resolved.get<enumeration_type>()) { return constant_value{ 1 }; @@ -555,6 +563,14 @@ namespace elna::boot { return constant_value{ std::numeric_limits<unsigned char>::max() }; } + if (is_primitive_type(resolved, "Bool")) + { + return constant_value{ true }; + } + if (is_primitive_type(resolved, "Float")) + { + return constant_value{ std::numeric_limits<double>::max() }; + } if (auto enumeration = resolved.get<enumeration_type>()) { return constant_value{ static_cast<std::int32_t>(enumeration->members.size()) }; diff --git a/boot/name_analysis.cc b/boot/name_analysis.cc index 22b7814..54a2d1a 100644 --- a/boot/name_analysis.cc +++ b/boot/name_analysis.cc @@ -539,9 +539,10 @@ for (const auto& member : expression->members) if (!trait->type_decoration.empty()) { type const resolved = resolve_underlying_type(trait->type_decoration); - bool const is_enum = resolved.get<enumeration_type>() != nullptr; - if (!is_enum && !is_discrete_type(resolved)) + if (resolved.get<enumeration_type>() == nullptr + && !is_primitive_type(resolved, "Float") + && !is_discrete_type(resolved)) { add_error<unsupported_trait_type_error>(trait->name, trait->type_decoration); |
