Add ast::type_alignment

This commit is contained in:
Nikita Lisitsa 2026-03-31 19:27:14 +03:00
parent d5eab856c8
commit e2781fef8f
2 changed files with 42 additions and 0 deletions

View file

@ -60,5 +60,6 @@ namespace pslang::ast
}; };
std::size_t type_size(types::type const & type); std::size_t type_size(types::type const & type);
std::size_t type_alignment(types::type const & type);
} }

View file

@ -82,6 +82,42 @@ namespace pslang::ast
} }
}; };
struct alignment_visitor
: types::const_visitor<alignment_visitor>
{
using const_visitor::apply;
std::size_t apply(types::unit_type const & type)
{
return 1;
}
std::size_t apply(types::primitive_type const & type)
{
return types::type_size(type);
}
std::size_t apply(types::array_type const & type)
{
return apply(*type.element_type);
}
std::size_t apply(types::function_type const &)
{
return 8;
}
std::size_t apply(types::pointer_type const &)
{
return 8;
}
std::size_t apply(types::struct_type const & type)
{
return type.node->layout.alignment;
}
};
} }
types::type_ptr get_type(type const & type) types::type_ptr get_type(type const & type)
@ -94,4 +130,9 @@ namespace pslang::ast
return size_visitor{}.apply(type); return size_visitor{}.apply(type);
} }
std::size_t type_alignment(types::type const & type)
{
return alignment_visitor{}.apply(type);
}
} }