From d02bda03a9d5a84c0836e04b46066874fbac50f3 Mon Sep 17 00:00:00 2001 From: Sergey Linev Date: Tue, 20 Oct 2026 17:53:54 +0200 Subject: [PATCH] Fix TDataMember::GetOptions() When extract enum values - just directly try to find such value in correspondent TEnum. Not sure how this can be done using list of class data members. (cherry picked from commit 9604629aef4c00bb64d2a3b3e2ec3647fc17a537) --- core/meta/src/TDataMember.cxx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/core/meta/src/TDataMember.cxx b/core/meta/src/TDataMember.cxx index 63d3801a40ff7..b284df90d2c4b 100644 --- a/core/meta/src/TDataMember.cxx +++ b/core/meta/src/TDataMember.cxx @@ -774,6 +774,8 @@ void TDataMember::ExtractOptionsFromComment() //having all options extracted and put into list, we finally can parse //them to create a list of options... + auto enumDict = IsEnum() ? TEnum::GetEnum(GetTypeName()) : nullptr; + fOptions = new TList(); //create the list TIter next(optionlist.get()); //we'll iterate through all @@ -803,11 +805,10 @@ void TDataMember::ExtractOptionsFromComment() // We'll try to find global enum existing in ROOT... l = (Long_t)(*value); } else if (IsEnum()) { - TObject *obj = fClass->GetListOfDataMembers(false)->FindObject(ptr1); - if (obj) - l = ((TEnumConstant *)obj)->GetValue(); + if (auto enumConst = enumDict ? (TEnumConstant*) enumDict->GetConstants()->FindObject(ptr1) : nullptr) + l = enumConst->GetValue(); else - l = gInterpreter->Calc(Form("%s;", ptr1)); + l = gInterpreter->Calc(TString::Format("%s;", ptr1)); } else { Fatal("TDataMember", "Internal error, couldn't recognize enum/global value %s.", ptr1); }