Skip to content

Commit

Permalink
TProtoClass: do not complaint innards of transients.
Browse files Browse the repository at this point in the history
Do not complain about missing information about data members that directly or indirectly within
a transient members of the top level class in GetRealData.

This solves the underlying problem from root-project#15733
  • Loading branch information
pcanal committed Aug 11, 2024
1 parent 531620f commit fb6a68d
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 8 deletions.
4 changes: 2 additions & 2 deletions core/meta/inc/TProtoClass.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ class TProtoClass: public TNamed {
TProtoRealData() : fOffset(0), fDMIndex(-1), fLevel(0), fClassIndex(-1), fStatusFlag(0) {}
TProtoRealData(const TRealData *rd);
virtual ~TProtoRealData();
TRealData *CreateRealData(TClass *currentClass, TClass *parent, TRealData * parentData, int prevLevel) const;
TRealData *CreateRealData(TClass *currentClass, TClass *parent, TRealData * parentData, int prevLevel, bool quiet) const;

Bool_t TestFlag(UInt_t f) const { return (Bool_t) ((fStatusFlag & f) != 0); }
void SetFlag(UInt_t f, Bool_t on = kTRUE) {
Expand Down Expand Up @@ -91,7 +91,7 @@ class TProtoClass: public TNamed {
// compute index of data member in the list
static Int_t DataMemberIndex(TClass * cl, const char * name);
// find data member given an index
static TDataMember * FindDataMember(TClass * cl, Int_t index);
static TDataMember * FindDataMember(TClass * cl, Int_t index, bool quiet);

public:
TProtoClass():
Expand Down
2 changes: 1 addition & 1 deletion core/meta/src/TClass.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -775,7 +775,7 @@ void TBuildRealData::Inspect(TClass* cl, const char* pname, const char* mname, c
return;
}

Bool_t isTransientMember = kFALSE;
Bool_t isTransientMember = isTransient;

if (!dm->IsPersistent()) {
// For the DataModelEvolution we need access to the transient member.
Expand Down
10 changes: 5 additions & 5 deletions core/meta/src/TProtoClass.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -378,7 +378,7 @@ Bool_t TProtoClass::FillTClass(TClass* cl) {
//TProtoRealData* prd = (TProtoRealData*)element;
// pass a previous real data only if depth

if (TRealData* rd = element.CreateRealData(currentRDClass, cl,prevRealData, prevLevel)) {
if (TRealData* rd = element.CreateRealData(currentRDClass, cl,prevRealData, prevLevel, element.TestFlag(TProtoRealData::kIsTransient))) {
if (first) {
//LM: need to do here because somehow fRealData is destroyed when calling TClass::GetListOfDataMembers()
if (cl->fRealData) {
Expand Down Expand Up @@ -465,11 +465,11 @@ TProtoClass::TProtoRealData::~TProtoRealData()
/// find data member from protoclass

TRealData* TProtoClass::TProtoRealData::CreateRealData(TClass* dmClass,
TClass* parent, TRealData *prevData, int prevLevel) const
TClass* parent, TRealData *prevData, int prevLevel, bool quiet) const
{

//TDataMember* dm = (TDataMember*)dmClass->GetListOfDataMembers()->FindObject(fName);
TDataMember* dm = TProtoClass::FindDataMember(dmClass, fDMIndex);
TDataMember* dm = TProtoClass::FindDataMember(dmClass, fDMIndex, quiet);

if (!dm && dmClass->GetState()!=TClass::kForwardDeclared && !dmClass->fIsSyntheticPair) {
::Error("CreateRealData",
Expand Down Expand Up @@ -558,7 +558,7 @@ Int_t TProtoClass::DataMemberIndex(TClass * cl, const char * name)
}
////////////////////////////////////////////////////////////////////////////////

TDataMember * TProtoClass::FindDataMember(TClass * cl, Int_t index)
TDataMember * TProtoClass::FindDataMember(TClass * cl, Int_t index, bool quiet)
{
TList * dmList = cl->GetListOfDataMembers(false);

Expand All @@ -572,7 +572,7 @@ TDataMember * TProtoClass::FindDataMember(TClass * cl, Int_t index)
return dm;
i++;
}
if (cl->GetState()!=TClass::kForwardDeclared && !cl->fIsSyntheticPair)
if (cl->GetState()!=TClass::kForwardDeclared && !cl->fIsSyntheticPair && !quiet)
::Error("TProtoClass::FindDataMember","data member with index %d is not found in class %s",index,cl->GetName());
return nullptr;
}

0 comments on commit fb6a68d

Please sign in to comment.