Skip to content

Commit

Permalink
natvis: meta
Browse files Browse the repository at this point in the history
  • Loading branch information
skypjack committed Sep 3, 2024
1 parent ea4470b commit 628bfbd
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 155 deletions.
5 changes: 1 addition & 4 deletions TODO
Original file line number Diff line number Diff line change
Expand Up @@ -41,12 +41,9 @@ TODO:
* review cmake warning about FetchContent_Populate (need .28 and EXCLUDE_FROM_ALL for FetchContent)
* deprecate meta properties in favor of custom data
* make meta objects safe to use with null nodes
* meta: vectors for details and props
* suppress -Wself-move on CI with g++13
* view and view iterator specializations for multi, single and filtered elements
* organizer support to groups
* meta factory: share code and cleanup after the map-to-vector rework
* update natvis for meta, many nodes changes due to the map-to-vector switch
* meta range: move id to meta objects and return plain types (?), then remove id from meta base and meta ctor too
* refine find_member in meta and use it also for conv and the others
* move find_member/find_overload to node.hpp, reuse them ie in meta_type::invoke
* reuse find_member/find_overload ie in meta_type::invoke
196 changes: 45 additions & 151 deletions natvis/entt/meta.natvis
Original file line number Diff line number Diff line change
@@ -1,16 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
<Type Name="entt::internal::meta_base_node">
<DisplayString Condition="resolve != nullptr">{{ type={ type } }}</DisplayString>
<DisplayString>{{}}</DisplayString>
<Expand/>
<Expand>
<Item Name="[type]">type</Item>
</Expand>
</Type>
<Type Name="entt::internal::meta_conv_node">
<DisplayString Condition="conv != nullptr">{{ type={ type } }}</DisplayString>
<DisplayString>{{}}</DisplayString>
<Expand/>
<Expand>
<Item Name="[type]">type</Item>
</Expand>
</Type>
<Type Name="entt::internal::meta_ctor_node">
<DisplayString>{{ arity={ arity } }}</DisplayString>
<DisplayString Condition="invoke != nullptr">{{ id={ id } }}</DisplayString>
<DisplayString>{{}}</DisplayString>
<Expand>
<Item Name="[id]">id</Item>
<Item Name="[arity]">arity</Item>
</Expand>
</Type>
Expand All @@ -19,184 +27,68 @@
<DisplayString>{{}}</DisplayString>
<Expand>
<Item Name="[type]">type</Item>
<ExpandedItem>value</ExpandedItem>
<Item Name="[value]">value</Item>
</Expand>
</Type>
<Type Name="entt::internal::meta_data_node">
<Intrinsic Name="has_trait" Expression="!!(traits &amp; property)">
<Parameter Name="property" Type="int"/>
</Intrinsic>
<Intrinsic Name="prop_at" Expression="prop.packed.first_base::value[pos].element">
<Parameter Name="pos" Type="int"/>
</Intrinsic>
<DisplayString>{{ arity={ arity } }}</DisplayString>
<DisplayString Condition="get != nullptr">{{ id={ id } }}</DisplayString>
<DisplayString>{{}}</DisplayString>
<Expand>
<Item Name="[id]">id</Item>
<Item Name="[arity]">arity</Item>
<Item Name="[is_const]">has_trait(entt::internal::meta_traits::is_const)</Item>
<Item Name="[is_static]">has_trait(entt::internal::meta_traits::is_static)</Item>
<Item Name="[custom]" Condition="custom.value != nullptr">custom</Item>
<Synthetic Name="[prop]">
<DisplayString>{ prop.size() }</DisplayString>
<Expand>
<CustomListItems>
<Variable Name="pos" InitialValue="0"/>
<Variable Name="last" InitialValue="prop.size()"/>
<Loop>
<Break Condition="pos == last"/>
<Item Name="[{ prop_at(pos).first }]">prop_at(pos).second</Item>
<Exec>++pos</Exec>
</Loop>
</CustomListItems>
</Expand>
</Synthetic>
<Item Name="[prop]">prop,view(simple)</Item>
<Item Name="[custom]">custom</Item>
</Expand>
</Type>
<Type Name="entt::internal::meta_dtor_node">
<DisplayString>{{}}</DisplayString>
<Expand/>
</Type>
<Type Name="entt::internal::meta_func_node" >
<Intrinsic Name="has_trait" Expression="!!(traits &amp; property)">
<Parameter Name="property" Type="int"/>
</Intrinsic>
<Intrinsic Name="prop_at" Expression="prop.packed.first_base::value[pos].element">
<Parameter Name="pos" Type="int"/>
</Intrinsic>
<DisplayString>{{ arity={ arity } }}</DisplayString>
<DisplayString Condition="invoke != nullptr">{{ id={ id } }}</DisplayString>
<DisplayString>{{}}</DisplayString>
<Expand>
<Item Name="[id]">id</Item>
<Item Name="[arity]">arity</Item>
<Item Name="[is_const]">has_trait(entt::internal::meta_traits::is_const)</Item>
<Item Name="[is_static]">has_trait(entt::internal::meta_traits::is_static)</Item>
<Item Name="[next]" Condition="next != nullptr">*next</Item>
<Item Name="[custom]" Condition="custom.value != nullptr">custom</Item>
<Synthetic Name="[prop]">
<DisplayString>{ prop.size() }</DisplayString>
<Expand>
<CustomListItems>
<Variable Name="pos" InitialValue="0"/>
<Variable Name="last" InitialValue="prop.size()"/>
<Loop>
<Break Condition="pos == last"/>
<Item Name="[{ prop_at(pos).first }]">prop_at(pos).second</Item>
<Exec>++pos</Exec>
</Loop>
</CustomListItems>
</Expand>
</Synthetic>
<Item Name="[prop]">prop,view(simple)</Item>
<Item Name="[custom]">custom</Item>
</Expand>
</Type>
<Type Name="entt::internal::meta_prop_node">
<DisplayString>{ value }</DisplayString>
<DisplayString Condition="value != nullptr">{{ key={ id } }}</DisplayString>
<DisplayString>{{}}</DisplayString>
<Expand>
<ExpandedItem>value</ExpandedItem>
<Item Name="[key]">id</Item>
<Item Name="[value]">value</Item>
</Expand>
</Type>
<Type Name="entt::internal::meta_template_node">
<DisplayString>{{ arity={ arity } }}</DisplayString>
<DisplayString Condition="arity != 0u">{{ arity={ arity } }}</DisplayString>
<DisplayString>{{}}</DisplayString>
<Expand>
<Item Name="[arity]">arity</Item>
</Expand>
</Type>
<Type Name="entt::internal::meta_type_descriptor">
<Intrinsic Name="ctor_at" Expression="ctor.packed.first_base::value[pos].element">
<Parameter Name="pos" Type="int"/>
</Intrinsic>
<Intrinsic Name="base_at" Expression="base.packed.first_base::value[pos].element">
<Parameter Name="pos" Type="int"/>
</Intrinsic>
<Intrinsic Name="conv_at" Expression="conv.packed.first_base::value[pos].element">
<Parameter Name="pos" Type="int"/>
</Intrinsic>
<Intrinsic Name="data_at" Expression="data.packed.first_base::value[pos].element">
<Parameter Name="pos" Type="int"/>
</Intrinsic>
<Intrinsic Name="func_at" Expression="func.packed.first_base::value[pos].element">
<Parameter Name="pos" Type="int"/>
</Intrinsic>
<Intrinsic Name="prop_at" Expression="prop.packed.first_base::value[pos].element">
<Parameter Name="pos" Type="int"/>
</Intrinsic>
<DisplayString/>
<Expand>
<Synthetic Name="[ctor]">
<DisplayString>{ ctor.size() }</DisplayString>
<Expand>
<CustomListItems>
<Variable Name="pos" InitialValue="0"/>
<Variable Name="last" InitialValue="ctor.size()"/>
<Loop>
<Break Condition="pos == last"/>
<Item Name="[{ ctor_at(pos).first }]">ctor_at(pos).second</Item>
<Exec>++pos</Exec>
</Loop>
</CustomListItems>
</Expand>
</Synthetic>
<Synthetic Name="[base]">
<DisplayString>{ base.size() }</DisplayString>
<Expand>
<CustomListItems>
<Variable Name="pos" InitialValue="0"/>
<Variable Name="last" InitialValue="base.size()"/>
<Loop>
<Break Condition="pos == last"/>
<Item Name="[{ base_at(pos).first }]">base_at(pos).second</Item>
<Exec>++pos</Exec>
</Loop>
</CustomListItems>
</Expand>
</Synthetic>
<Synthetic Name="[conv]">
<DisplayString>{ conv.size() }</DisplayString>
<Expand>
<CustomListItems>
<Variable Name="pos" InitialValue="0"/>
<Variable Name="last" InitialValue="conv.size()"/>
<Loop>
<Break Condition="pos == last"/>
<Item Name="[{ conv_at(pos).first }]">conv_at(pos).second</Item>
<Exec>++pos</Exec>
</Loop>
</CustomListItems>
</Expand>
</Synthetic>
<Synthetic Name="[data]">
<DisplayString>{ data.size() }</DisplayString>
<Expand>
<CustomListItems>
<Variable Name="pos" InitialValue="0"/>
<Variable Name="last" InitialValue="data.size()"/>
<Loop>
<Break Condition="pos == last"/>
<Item Name="[{ data_at(pos).first }]">data_at(pos).second</Item>
<Exec>++pos</Exec>
</Loop>
</CustomListItems>
</Expand>
</Synthetic>
<Synthetic Name="[func]">
<DisplayString>{ func.size() }</DisplayString>
<Expand>
<CustomListItems>
<Variable Name="pos" InitialValue="0"/>
<Variable Name="last" InitialValue="func.size()"/>
<Loop>
<Break Condition="pos == last"/>
<Item Name="[{ func_at(pos).first }]">func_at(pos).second</Item>
<Exec>++pos</Exec>
</Loop>
</CustomListItems>
</Expand>
</Synthetic>
<Synthetic Name="[prop]">
<DisplayString>{ prop.size() }</DisplayString>
<Expand>
<CustomListItems>
<Variable Name="pos" InitialValue="0"/>
<Variable Name="last" InitialValue="prop.size()"/>
<Loop>
<Break Condition="pos == last"/>
<Item Name="[{ prop_at(pos).first }]">prop_at(pos).second</Item>
<Exec>++pos</Exec>
</Loop>
</CustomListItems>
</Expand>
</Synthetic>
<Item Name="[ctor]">ctor,view(simple)</Item>
<Item Name="[base]">base,view(simple)</Item>
<Item Name="[conv]">conv,view(simple)</Item>
<Item Name="[data]">data,view(simple)</Item>
<Item Name="[func]">func,view(simple)</Item>
<Item Name="[prop]">prop,view(simple)</Item>
</Expand>
</Type>
<Type Name="entt::internal::meta_type_node">
Expand All @@ -221,9 +113,9 @@
<Item Name="[default_constructor]">default_constructor != nullptr</Item>
<Item Name="[conversion_helper]">conversion_helper != nullptr</Item>
<Item Name="[from_void]">from_void != nullptr</Item>
<Item Name="[template_info]" Condition="templ.arity != 0u">templ</Item>
<Item Name="[custom]" Condition="custom.value != nullptr">custom</Item>
<Item Name="[details]" Condition="details != nullptr">*details</Item>
<Item Name="[template_info]">templ</Item>
<Item Name="[custom]">custom</Item>
<Item Name="[details]" Condition="!(details == nullptr)">*details</Item>
</Expand>
</Type>
<Type Name="entt::meta_any">
Expand All @@ -236,7 +128,9 @@
</Type>
<Type Name="entt::meta_handle">
<DisplayString>{ any }</DisplayString>
<Expand/>
<Expand>
<ExpandedItem>any</ExpandedItem>
</Expand>
</Type>
<Type Name="entt::meta_associative_container">
<DisplayString>{ storage }</DisplayString>
Expand Down

0 comments on commit 628bfbd

Please sign in to comment.