From df65d1e82901a5a3824af571cd17f23cd51eef54 Mon Sep 17 00:00:00 2001 From: Jon Siwek Date: Tue, 5 May 2020 10:40:55 -0700 Subject: [PATCH] Deprecate ListVal::ConvertToSet(), add ListVal::ToSetVal() --- src/DNS_Mgr.cc | 10 +++------- src/Val.cc | 9 +++++++-- src/Val.h | 3 +++ src/zeek.bif | 5 ++--- 4 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/DNS_Mgr.cc b/src/DNS_Mgr.cc index 9d1ec75e87..fcd3cd7eb5 100644 --- a/src/DNS_Mgr.cc +++ b/src/DNS_Mgr.cc @@ -297,7 +297,7 @@ IntrusivePtr DNS_Mapping::AddrsSet() { if ( ! l ) return empty_addr_set(); - return {AdoptRef{}, l->ConvertToSet()}; + return l->ToSetVal(); } IntrusivePtr DNS_Mapping::Host() @@ -479,7 +479,7 @@ static IntrusivePtr fake_name_lookup_result(const char* name) KeyedHash::StaticHash128(name, strlen(name), &hash); auto hv = make_intrusive(TYPE_ADDR); hv->Append(new AddrVal(reinterpret_cast(&hash))); - return {AdoptRef{}, hv->ConvertToSet()}; + return hv->ToSetVal(); } static const char* fake_text_lookup_result(const char* name) @@ -715,11 +715,7 @@ void DNS_Mgr::Event(EventHandlerPtr e, DNS_Mapping* dm, if ( ! e ) return; - mgr.Enqueue(e, - BuildMappingVal(dm), - IntrusivePtr{AdoptRef{}, l1->ConvertToSet()}, - IntrusivePtr{AdoptRef{}, l2->ConvertToSet()} - ); + mgr.Enqueue(e, BuildMappingVal(dm), l1->ToSetVal(), l2->ToSetVal()); } void DNS_Mgr::Event(EventHandlerPtr e, DNS_Mapping* old_dm, DNS_Mapping* new_dm) diff --git a/src/Val.cc b/src/Val.cc index 24c423993f..aba7d6722b 100644 --- a/src/Val.cc +++ b/src/Val.cc @@ -1226,7 +1226,7 @@ void ListVal::Append(Val* v) type->AsTypeList()->Append({NewRef{}, v->Type()}); } -TableVal* ListVal::ConvertToSet() const +IntrusivePtr ListVal::ToSetVal() const { if ( tag == TYPE_ANY ) Internal("conversion of heterogeneous list to set"); @@ -1235,7 +1235,7 @@ TableVal* ListVal::ConvertToSet() const IntrusivePtr{NewRef{}, type->AsTypeList()->PureType()}); set_index->Append(base_type(tag)); auto s = make_intrusive(std::move(set_index), nullptr); - TableVal* t = new TableVal(std::move(s)); + auto t = make_intrusive(std::move(s)); for ( const auto& val : vals ) t->Assign(val, nullptr); @@ -1243,6 +1243,11 @@ TableVal* ListVal::ConvertToSet() const return t; } +TableVal* ListVal::ConvertToSet() const + { + return ToSetVal().release(); + } + void ListVal::Describe(ODesc* d) const { if ( d->IsBinary() || d->IsPortable() ) diff --git a/src/Val.h b/src/Val.h index 1bcc5cc147..0ba76d7e33 100644 --- a/src/Val.h +++ b/src/Val.h @@ -644,6 +644,9 @@ public: void Append(Val* v); // Returns a Set representation of the list (which must be homogeneous). + IntrusivePtr ToSetVal() const; + + [[deprecated("Remove in v4.1. Use ToSetVal() instead.")]] TableVal* ConvertToSet() const; const val_list* Vals() const { return &vals; } diff --git a/src/zeek.bif b/src/zeek.bif index 70674fe43b..f3b498e80c 100644 --- a/src/zeek.bif +++ b/src/zeek.bif @@ -3525,9 +3525,8 @@ public: { ListVal* lv = new ListVal(TYPE_ADDR); lv->Append(new AddrVal("0.0.0.0")); - Val* result = lv->ConvertToSet(); - trigger->Cache(call, result); - Unref(result); + auto result = lv->ToSetVal(); + trigger->Cache(call, result.get()); Unref(lv); }