Michele Caini hace 1 año
padre
commit
628bfbd4ca
Se han modificado 2 ficheros con 46 adiciones y 155 borrados
  1. 1 4
      TODO
  2. 45 151
      natvis/entt/meta.natvis

+ 1 - 4
TODO

@@ -41,12 +41,9 @@ TODO:
 * review cmake warning about FetchContent_Populate (need .28 and EXCLUDE_FROM_ALL for FetchContent)
 * review cmake warning about FetchContent_Populate (need .28 and EXCLUDE_FROM_ALL for FetchContent)
 * deprecate meta properties in favor of custom data
 * deprecate meta properties in favor of custom data
 * make meta objects safe to use with null nodes
 * make meta objects safe to use with null nodes
-* meta: vectors for details and props
 * suppress -Wself-move on CI with g++13
 * suppress -Wself-move on CI with g++13
 * view and view iterator specializations for multi, single and filtered elements
 * view and view iterator specializations for multi, single and filtered elements
 * organizer support to groups
 * organizer support to groups
 * meta factory: share code and cleanup after the map-to-vector rework
 * 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
 * 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

+ 45 - 151
natvis/entt/meta.natvis

@@ -1,16 +1,24 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
 <AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
 <AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
 	<Type Name="entt::internal::meta_base_node">
 	<Type Name="entt::internal::meta_base_node">
+		<DisplayString Condition="resolve != nullptr">{{ type={ type } }}</DisplayString>
 		<DisplayString>{{}}</DisplayString>
 		<DisplayString>{{}}</DisplayString>
-		<Expand/>
+		<Expand>
+			<Item Name="[type]">type</Item>
+		</Expand>
 	</Type>
 	</Type>
 	<Type Name="entt::internal::meta_conv_node">
 	<Type Name="entt::internal::meta_conv_node">
+		<DisplayString Condition="conv != nullptr">{{ type={ type } }}</DisplayString>
 		<DisplayString>{{}}</DisplayString>
 		<DisplayString>{{}}</DisplayString>
-		<Expand/>
+		<Expand>
+			<Item Name="[type]">type</Item>
+		</Expand>
 	</Type>
 	</Type>
 	<Type Name="entt::internal::meta_ctor_node">
 	<Type Name="entt::internal::meta_ctor_node">
-		<DisplayString>{{ arity={ arity } }}</DisplayString>
+		<DisplayString Condition="invoke != nullptr">{{ id={ id } }}</DisplayString>
+		<DisplayString>{{}}</DisplayString>
 		<Expand>
 		<Expand>
+			<Item Name="[id]">id</Item>
 			<Item Name="[arity]">arity</Item>
 			<Item Name="[arity]">arity</Item>
 		</Expand>
 		</Expand>
 	</Type>
 	</Type>
@@ -19,184 +27,68 @@
 		<DisplayString>{{}}</DisplayString>
 		<DisplayString>{{}}</DisplayString>
 		<Expand>
 		<Expand>
 			<Item Name="[type]">type</Item>
 			<Item Name="[type]">type</Item>
-			<ExpandedItem>value</ExpandedItem>
+			<Item Name="[value]">value</Item>
 		</Expand>
 		</Expand>
 	</Type>
 	</Type>
 	<Type Name="entt::internal::meta_data_node">
 	<Type Name="entt::internal::meta_data_node">
 		<Intrinsic Name="has_trait" Expression="!!(traits &amp; property)">
 		<Intrinsic Name="has_trait" Expression="!!(traits &amp; property)">
 			<Parameter Name="property" Type="int"/>
 			<Parameter Name="property" Type="int"/>
 		</Intrinsic>
 		</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>
 		<Expand>
+			<Item Name="[id]">id</Item>
 			<Item Name="[arity]">arity</Item>
 			<Item Name="[arity]">arity</Item>
 			<Item Name="[is_const]">has_trait(entt::internal::meta_traits::is_const)</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="[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>
 		</Expand>
 	</Type>
 	</Type>
+	<Type Name="entt::internal::meta_dtor_node">
+		<DisplayString>{{}}</DisplayString>
+		<Expand/>
+	</Type>	
 	<Type Name="entt::internal::meta_func_node"	>
 	<Type Name="entt::internal::meta_func_node"	>
 		<Intrinsic Name="has_trait" Expression="!!(traits &amp; property)">
 		<Intrinsic Name="has_trait" Expression="!!(traits &amp; property)">
 			<Parameter Name="property" Type="int"/>
 			<Parameter Name="property" Type="int"/>
 		</Intrinsic>
 		</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>
 		<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_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="[is_static]">has_trait(entt::internal::meta_traits::is_static)</Item>
 			<Item Name="[next]" Condition="next != nullptr">*next</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>
 		</Expand>
 	</Type>
 	</Type>
 	<Type Name="entt::internal::meta_prop_node">
 	<Type Name="entt::internal::meta_prop_node">
-		<DisplayString>{ value }</DisplayString>
+		<DisplayString Condition="value != nullptr">{{ key={ id } }}</DisplayString>
+		<DisplayString>{{}}</DisplayString>
 		<Expand>
 		<Expand>
-			<ExpandedItem>value</ExpandedItem>
+			<Item Name="[key]">id</Item>
+			<Item Name="[value]">value</Item>
 		</Expand>
 		</Expand>
 	</Type>
 	</Type>
 	<Type Name="entt::internal::meta_template_node">
 	<Type Name="entt::internal::meta_template_node">
-		<DisplayString>{{ arity={ arity } }}</DisplayString>
+		<DisplayString Condition="arity != 0u">{{ arity={ arity } }}</DisplayString>
+		<DisplayString>{{}}</DisplayString>
 		<Expand>
 		<Expand>
 			<Item Name="[arity]">arity</Item>
 			<Item Name="[arity]">arity</Item>
 		</Expand>
 		</Expand>
 	</Type>
 	</Type>
 	<Type Name="entt::internal::meta_type_descriptor">
 	<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/>
 		<DisplayString/>
 		<Expand>
 		<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>
 		</Expand>
 	</Type>
 	</Type>
 	<Type Name="entt::internal::meta_type_node">
 	<Type Name="entt::internal::meta_type_node">
@@ -221,9 +113,9 @@
 			<Item Name="[default_constructor]">default_constructor != nullptr</Item>
 			<Item Name="[default_constructor]">default_constructor != nullptr</Item>
 			<Item Name="[conversion_helper]">conversion_helper != nullptr</Item>
 			<Item Name="[conversion_helper]">conversion_helper != nullptr</Item>
 			<Item Name="[from_void]">from_void != 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>
 		</Expand>
 	</Type>
 	</Type>
 	<Type Name="entt::meta_any">
 	<Type Name="entt::meta_any">
@@ -236,7 +128,9 @@
 	</Type>
 	</Type>
 	<Type Name="entt::meta_handle">
 	<Type Name="entt::meta_handle">
 		<DisplayString>{ any }</DisplayString>
 		<DisplayString>{ any }</DisplayString>
-		<Expand/>
+		<Expand>
+			<ExpandedItem>any</ExpandedItem>
+		</Expand>
 	</Type>
 	</Type>
 	<Type Name="entt::meta_associative_container">
 	<Type Name="entt::meta_associative_container">
 		<DisplayString>{ storage }</DisplayString>
 		<DisplayString>{ storage }</DisplayString>