-- (T => To_Tag_Ptr (Obj'Address).all,
-- Position =>
-- Ada.Tags.Get_Offset_Index
- -- (Ada.Tags.Tag (Concval),
+ -- (Concval._Tag,
-- <interface dispatch table position of Ename>));
-- Note that Obj'Address is recursively expanded into a call to
Make_Function_Call (Loc,
Name => New_Occurrence_Of (RTE (RE_Get_Offset_Index), Loc),
Parameter_Associations => New_List (
- Unchecked_Convert_To (RTE (RE_Tag), Concval),
+ Make_Attribute_Reference (Loc,
+ Prefix => Concval,
+ Attribute_Name => Name_Tag),
Make_Integer_Literal (Loc,
DT_Position (Entity (Ename))))))));
Get_Base_And_Bit_Offset (Prefix (N), Base, Offset);
+ Offset := Unchecked_Convert_To (RTE (RE_Storage_Offset), Offset);
+
Rewrite (N,
- Unchecked_Convert_To (RTE (RE_Address),
- Make_Op_Add (Loc,
- Left_Opnd =>
- Unchecked_Convert_To (RTE (RE_Integer_Address),
- Make_Attribute_Reference (Loc,
- Prefix => Base,
- Attribute_Name => Name_Address)),
-
- Right_Opnd =>
- Unchecked_Convert_To (RTE (RE_Integer_Address),
- Make_Op_Divide (Loc,
- Left_Opnd => Offset,
- Right_Opnd =>
- Make_Integer_Literal (Loc, System_Storage_Unit))))));
+ Make_Function_Call (Loc,
+ Name =>
+ Make_Expanded_Name (Loc,
+ Chars => Name_Op_Add,
+ Prefix =>
+ New_Occurrence_Of (RTU_Entity (System_Storage_Elements), Loc),
+ Selector_Name => Make_Identifier (Loc, Name_Op_Add)),
+ Parameter_Associations => New_List (
+ Make_Attribute_Reference (Loc,
+ Prefix => Base,
+ Attribute_Name => Name_Address),
+ Make_Op_Divide (Loc,
+ Left_Opnd => Offset,
+ Right_Opnd =>
+ Make_Integer_Literal (Loc, System_Storage_Unit)))));
Analyze_And_Resolve (N, RTE (RE_Address));
end Expand_Packed_Address_Reference;