aboutsummaryrefslogtreecommitdiff
path: root/boot/type_check.cc
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2026-10-09 14:43:11 +0200
committerEugen Wissner <belka@caraus.de>2026-10-09 14:43:11 +0200
commit134d3ac4caff6d87c79b0892e57073594cb0064c (patch)
treee93c73d59ee50f3bdaa073bb5908ae3c74f7a985 /boot/type_check.cc
parent244449004fb62adbfd43b81e8dfce7500ca4a7e4 (diff)
downloadelna-134d3ac4caff6d87c79b0892e57073594cb0064c.tar.gz
Remove Pointer and nil support
Diffstat (limited to 'boot/type_check.cc')
-rw-r--r--boot/type_check.cc52
1 files changed, 4 insertions, 48 deletions
diff --git a/boot/type_check.cc b/boot/type_check.cc
index 31e10f1..797282c 100644
--- a/boot/type_check.cc
+++ b/boot/type_check.cc
@@ -406,8 +406,7 @@ namespace elna::boot
/*
* Scaling an offset needs the pointee size, which neither an opaque type
- * nor a type parameter has. Only a pointer_type scales; the generic
- * Pointer advances byte-wise.
+ * nor a type parameter has.
*/
static std::optional<type> find_arithmetic_violation(binary_operator operation,
const type& lhs, const type& rhs)
@@ -505,45 +504,11 @@ namespace elna::boot
}
}
- assign_check::verdict assign_check::guard_const_laundering() const
- {
- if (!is_primitive_type(ctx.aliased_assignee, "Pointer"))
- {
- return verdict::pass;
- }
- if (const auto ptr = ctx.aliased_assignment.get<pointer_type>();
- ptr != nullptr && resolve_aliases(ptr->base).get<constant_type>() != nullptr)
- {
- return verdict::reject;
- }
- if (const auto const_assign = ctx.aliased_assignment.get<constant_type>();
- const_assign != nullptr && is_primitive_type(const_assign->unqualified, "Pointer"))
- {
- return verdict::reject;
- }
- return verdict::pass;
- }
-
assign_check::verdict assign_check::check_exact_match() const
{
return ctx.resolved_assignee == ctx.resolved_assignment ? verdict::accept : verdict::pass;
}
- assign_check::verdict assign_check::check_pointer_hatch() const
- {
- if (is_primitive_type(ctx.resolved_assignee, "Pointer")
- && is_any_pointer_type(ctx.resolved_assignment))
- {
- return verdict::accept;
- }
- if (is_primitive_type(ctx.resolved_assignment, "Pointer")
- && is_any_pointer_type(ctx.resolved_assignee))
- {
- return verdict::accept;
- }
- return verdict::pass;
- }
-
assign_check::verdict assign_check::check_pointer_conversion() const
{
const std::shared_ptr<pointer_type> assignee_ptr = ctx.resolved_assignee.get<pointer_type>();
@@ -637,11 +602,9 @@ namespace elna::boot
bool assign_check::run()
{
const std::initializer_list assign_handlers = {
- &assign_check::guard_const_laundering,
&assign_check::check_exact_match,
&assign_check::check_slice_conversion,
&assign_check::check_array_conversion,
- &assign_check::check_pointer_hatch,
&assign_check::check_pointer_conversion
};
for (const auto handler : assign_handlers)
@@ -1153,17 +1116,10 @@ namespace elna::boot
}
else if (const auto left_pointer = left.get<pointer_type>())
{
- if (is_primitive_type(right, "Pointer"))
- {
- return true;
- }
- else
- {
- const std::shared_ptr<pointer_type> right_pointer = right.get<pointer_type>();
+ const std::shared_ptr<pointer_type> right_pointer = right.get<pointer_type>();
- return right_pointer != nullptr
- && bind_arguments(parameters, bindings, left_pointer->base, right_pointer->base);
- }
+ return right_pointer != nullptr
+ && bind_arguments(parameters, bindings, left_pointer->base, right_pointer->base);
}
else if (const auto left_slice = left.get<slice_type>())
{