end if;
-- Components of imported CPP types must not have default
- -- expressions because the constructor (if any) is in the
+ -- expressions because the constructor (if any) is on the
-- C++ side.
declare
-- because in C++ they don't have a dispatch table slot.
-- However, in Ada the constructor has the profile of a
-- function that returns a tagged type and therefore it has
- -- been considered by the Semantic analyzer a dispatching
- -- primitive operation. We extract it now from the list of
- -- primitive operations of the type.
+ -- been treated as a primitive operation during semantic
+ -- analysis. We now remove it from the list of primitive
+ -- operations of the type.
if Is_Tagged_Type (Etype (Def_Id))
and then not Is_Class_Wide_Type (Etype (Def_Id))
Tag_Typ := Etype (Def_Id);
Elmt := First_Elmt (Primitive_Operations (Tag_Typ));
- while Present (Elmt)
- and then Node (Elmt) /= Def_Id
- loop
+ while Present (Elmt) and then Node (Elmt) /= Def_Id loop
Next_Elmt (Elmt);
end loop;
end if;
-- For backward compatibility, if the constructor returns a
- -- class wide type we internally change the returned type to
- -- the corresponding non class-wide type.
+ -- class wide type, and we internally change the return type to
+ -- the corresponding root type.
if Is_Class_Wide_Type (Etype (Def_Id)) then
Set_Etype (Def_Id, Root_Type (Etype (Def_Id)));