diff options
Diffstat (limited to 'boot/evaluator.cc')
| -rw-r--r-- | boot/evaluator.cc | 10 |
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; |
