-- True if a node/entity of the given Kind has the given Field.
-- Always True if assertions are disabled.
+ function Field_Present
+ (N : Node_Id; Field : Node_Or_Entity_Field) return Boolean;
+ -- Same for a node, which could be an entity
+
end Field_Checking;
package body Field_Checking is
return Entity_Fields_Present (Kind) (Field);
end Field_Present;
+ function Field_Present
+ (N : Node_Id; Field : Node_Or_Entity_Field) return Boolean is
+ begin
+ case Field is
+ when Node_Field =>
+ return Field_Present (Nkind (N), Field);
+ when Entity_Field =>
+ return Field_Present (Ekind (N), Field);
+ end case;
+ end Field_Present;
+
end Field_Checking;
------------------------
function Get_Field_Value
(N : Node_Id; Field : Node_Or_Entity_Field) return Field_Size_32_Bit
is
+ pragma Assert
+ (if Field /= F_Scope_Depth_Value then -- ???Temporarily disable check
+ Field_Checking.Field_Present (N, Field));
+ -- Assert partially disabled because it fails in rare cases
Desc : Field_Descriptor renames Field_Descriptors (Field);
NN : constant Node_Or_Entity_Id := Node_To_Fetch_From (N, Field);
procedure Set_Field_Value
(N : Node_Id; Field : Node_Or_Entity_Field; Val : Field_Size_32_Bit)
is
+ pragma Assert (Field_Checking.Field_Present (N, Field));
Desc : Field_Descriptor renames Field_Descriptors (Field);
begin