aboutsummaryrefslogtreecommitdiff
path: root/boot/evaluator.cc
diff options
context:
space:
mode:
Diffstat (limited to 'boot/evaluator.cc')
-rw-r--r--boot/evaluator.cc10
1 files changed, 8 insertions, 2 deletions
diff --git a/boot/evaluator.cc b/boot/evaluator.cc
index b1648af..0a6ebe5 100644
--- a/boot/evaluator.cc
+++ b/boot/evaluator.cc
@@ -72,6 +72,12 @@ namespace elna::boot
{
return target.word_properties.front();
}
+ else if (resolved.get<instantiated_type>() != nullptr)
+ {
+ const type erased = erase_generic(resolved);
+
+ return erased.empty() ? std::nullopt : get_type_properties(erased, target);
+ }
else if (auto resolved_primitive = resolved.get<primitive_type>())
{
return resolved_primitive->properties;
@@ -127,7 +133,7 @@ namespace elna::boot
{
break;
}
- current_record = resolve_underlying_type(current_record->base).get<record_type>();
+ current_record = erase_generic(current_record->base).get<record_type>();
}
for (auto const *current_record : std::views::reverse(chain))
{
@@ -1097,7 +1103,7 @@ namespace elna::boot
else if (subject.name.name() == "offset")
{
auto *field = subject.arguments.at(1)->is_named();
- auto record = resolve_underlying_type(subject.types.front()).get<record_type>();
+ auto record = erase_generic(subject.types.front()).get<record_type>();
if (field == nullptr || record == nullptr)
{
return std::nullopt;