Deprecate RecordVal::Lookup(int), replace with GetField(int)

This commit is contained in:
Jon Siwek 2020-05-19 18:19:58 -07:00
parent 377779bb2a
commit f729247778
20 changed files with 78 additions and 60 deletions

2
NEWS
View file

@ -197,6 +197,8 @@ Deprecated Functionality
- ``RecordVal::Assign(int, Val*)`` is deprecated, use the overload taking
``IntrusivePtr``.
- ``RecordVal::Lookup(int)`` is deprecated, use ``RecordVal::GetField(int)``.
Zeek 3.1.0
==========

View file

@ -180,7 +180,7 @@ char* CompositeHash::SingleValHash(bool type_check, char* kp0,
for ( int i = 0; i < num_fields; ++i )
{
auto rv_i = rv->Lookup(i);
auto rv_i = rv->GetField(i).get();
Attributes* a = rt->FieldDecl(i)->attrs.get();
bool optional = (a && a->FindAttr(ATTR_OPTIONAL));
@ -518,7 +518,7 @@ int CompositeHash::SingleTypeKeySize(BroType* bt, const Val* v,
bool optional = (a && a->FindAttr(ATTR_OPTIONAL));
sz = SingleTypeKeySize(rt->GetFieldType(i).get(),
rv ? rv->Lookup(i) : nullptr,
rv ? rv->GetField(i).get() : nullptr,
type_check, sz, optional,
calc_static_size);
if ( ! sz )

View file

@ -430,7 +430,7 @@ void Connection::AppendAddl(const char* str)
{
const auto& cv = ConnVal();
const char* old = cv->Lookup(6)->AsString()->CheckString();
const char* old = cv->GetField(6)->AsString()->CheckString();
const char* format = *old ? "%s %s" : "%s%s";
cv->Assign(6, make_intrusive<StringVal>(fmt(format, old, str)));
@ -699,7 +699,7 @@ void Connection::CheckFlowLabel(bool is_orig, uint32_t flow_label)
{
if ( conn_val )
{
RecordVal *endp = conn_val->Lookup(is_orig ? 1 : 2)->AsRecordVal();
RecordVal* endp = conn_val->GetField(is_orig ? 1 : 2)->AsRecordVal();
endp->Assign(4, val_mgr->Count(flow_label));
}

View file

@ -2897,8 +2897,8 @@ void FieldExpr::Delete(Frame* f)
IntrusivePtr<Val> FieldExpr::Fold(Val* v) const
{
if ( Val* result = v->AsRecordVal()->Lookup(field) )
return {NewRef{}, result};
if ( const auto& result = v->AsRecordVal()->GetField(field) )
return result;
// Check for &default.
const Attr* def_attr = td ? td->FindAttr(ATTR_DEFAULT) : nullptr;
@ -2959,7 +2959,7 @@ HasFieldExpr::~HasFieldExpr()
IntrusivePtr<Val> HasFieldExpr::Fold(Val* v) const
{
auto rv = v->AsRecordVal();
return val_mgr->Bool(rv->Lookup(field));
return val_mgr->Bool(rv->GetField(field) != nullptr);
}
void HasFieldExpr::ExprDescribe(ODesc* d) const
@ -3659,7 +3659,7 @@ IntrusivePtr<Val> RecordCoerceExpr::Fold(Val* v) const
{
if ( map[i] >= 0 )
{
IntrusivePtr<Val> rhs{NewRef{}, rv->Lookup(map[i])};
auto rhs = rv->GetField(map[i]);
if ( ! rhs )
{
@ -4830,7 +4830,7 @@ IntrusivePtr<Val> CastExpr::Eval(Frame* f) const
d.Add("'");
if ( same_type(v->GetType().get(), bro_broker::DataVal::ScriptDataType()) &&
! v->AsRecordVal()->Lookup(0) )
! v->AsRecordVal()->GetField(0) )
d.Add(" (nil $data field)");
RuntimeError(d.Description());

View file

@ -107,19 +107,19 @@ BroSubstring::Vec* BroSubstring::VecFromPolicy(VectorVal* vec)
if ( ! v )
continue;
const BroString* str = v->AsRecordVal()->Lookup(0)->AsString();
const BroString* str = v->AsRecordVal()->GetField(0)->AsString();
BroSubstring* substr = new BroSubstring(*str);
const VectorVal* aligns = v->AsRecordVal()->Lookup(1)->AsVectorVal();
const VectorVal* aligns = v->AsRecordVal()->GetField(1)->AsVectorVal();
for ( unsigned int j = 1; j <= aligns->Size(); ++j )
{
const RecordVal* align = aligns->AsVectorVal()->Lookup(j)->AsRecordVal();
const BroString* str = align->Lookup(0)->AsString();
int index = align->Lookup(1)->AsCount();
const BroString* str = align->GetField(0)->AsString();
int index = align->GetField(1)->AsCount();
substr->AddAlignment(str, index);
}
bool new_alignment = v->AsRecordVal()->Lookup(2)->AsBool();
bool new_alignment = v->AsRecordVal()->GetField(2)->AsBool();
substr->MarkNewAlignment(new_alignment);
result->push_back(substr);

View file

@ -804,10 +804,10 @@ IntrusivePtr<TableVal> RecordType::GetRecordFieldsVal(const RecordVal* rv) const
{
const auto& ft = GetFieldType(i);
const TypeDecl* fd = FieldDecl(i);
Val* fv = nullptr;
IntrusivePtr<Val> fv;
if ( rv )
fv = rv->Lookup(i);
fv = rv->GetField(i);
bool logged = (fd->attrs && fd->FindAttr(ATTR_LOG) != nullptr);
@ -816,7 +816,7 @@ IntrusivePtr<TableVal> RecordType::GetRecordFieldsVal(const RecordVal* rv) const
string s = container_type_name(ft.get());
nr->Assign(0, make_intrusive<StringVal>(s));
nr->Assign(1, val_mgr->Bool(logged));
nr->Assign(2, {NewRef{}, fv});
nr->Assign(2, std::move(fv));
nr->Assign(3, FieldDefault(i));
Val* field_name = new StringVal(FieldName(i));
rval->Assign(field_name, std::move(nr));

View file

@ -2741,11 +2741,6 @@ void RecordVal::Assign(int field, Val* new_val)
Assign(field, {AdoptRef{}, new_val});
}
Val* RecordVal::Lookup(int field) const
{
return (*AsRecord())[field].get();
}
IntrusivePtr<Val> RecordVal::LookupWithDefault(int field) const
{
const auto& val = (*AsRecord())[field];
@ -2793,7 +2788,7 @@ IntrusivePtr<Val> RecordVal::Lookup(const char* field, bool with_default) const
if ( idx < 0 )
reporter->InternalError("missing record field: %s", field);
return with_default ? LookupWithDefault(idx) : IntrusivePtr{NewRef{}, Lookup(idx)};
return with_default ? LookupWithDefault(idx) : GetField(idx);
}
IntrusivePtr<RecordVal> RecordVal::CoerceTo(IntrusivePtr<RecordType> t,
@ -2827,7 +2822,7 @@ IntrusivePtr<RecordVal> RecordVal::CoerceTo(IntrusivePtr<RecordType> t,
break;
}
Val* v = Lookup(i);
const auto& v = GetField(i);
if ( ! v )
// Check for allowable optional fields is outside the loop, below.
@ -2837,18 +2832,18 @@ IntrusivePtr<RecordVal> RecordVal::CoerceTo(IntrusivePtr<RecordType> t,
if ( ft->Tag() == TYPE_RECORD && ! same_type(ft.get(), v->GetType().get()) )
{
auto rhs = make_intrusive<ConstExpr>(IntrusivePtr{NewRef{}, v});
auto rhs = make_intrusive<ConstExpr>(v);
auto e = make_intrusive<RecordCoerceExpr>(std::move(rhs),
cast_intrusive<RecordType>(ft));
aggr->Assign(t_i, e->Eval(nullptr));
continue;
}
aggr->Assign(t_i, {NewRef{}, v});
aggr->Assign(t_i, v);
}
for ( i = 0; i < ar_t->NumFields(); ++i )
if ( ! aggr->Lookup(i) &&
if ( ! aggr->GetField(i) &&
! ar_t->FieldDecl(i)->FindAttr(ATTR_OPTIONAL) )
{
char buf[512];
@ -3390,12 +3385,12 @@ IntrusivePtr<Val> cast_value_to_type(Val* v, BroType* t)
if ( same_type(v->GetType().get(), bro_broker::DataVal::ScriptDataType()) )
{
auto dv = v->AsRecordVal()->Lookup(0);
const auto& dv = v->AsRecordVal()->GetField(0);
if ( ! dv )
return nullptr;
return static_cast<bro_broker::DataVal*>(dv)->castTo(t);
return static_cast<bro_broker::DataVal*>(dv.get())->castTo(t);
}
return nullptr;
@ -3416,12 +3411,12 @@ bool can_cast_value_to_type(const Val* v, BroType* t)
if ( same_type(v->GetType().get(), bro_broker::DataVal::ScriptDataType()) )
{
auto dv = v->AsRecordVal()->Lookup(0);
const auto& dv = v->AsRecordVal()->GetField(0);
if ( ! dv )
return false;
return static_cast<const bro_broker::DataVal *>(dv)->canCastTo(t);
return static_cast<const bro_broker::DataVal *>(dv.get())->canCastTo(t);
}
return false;

View file

@ -965,7 +965,27 @@ public:
void Assign(int field, std::nullptr_t)
{ Assign(field, IntrusivePtr<Val>{}); }
Val* Lookup(int field) const; // Does not Ref() value.
[[deprecated("Remove in v4.1. Use GetField().")]]
Val* Lookup(int field) const // Does not Ref() value.
{ return (*AsRecord())[field].get(); }
/**
* Returns the value of a given field index.
* @param field The field index to retrieve.
* @return The value at the given field index.
*/
const IntrusivePtr<Val>& GetField(int field) const
{ return (*AsRecord())[field]; }
/**
* Returns the value of a given field index as cast to type @c T.
* @param field The field index to retrieve.
* @return The value at the given field index cast to type @c T.
*/
template <class T>
IntrusivePtr<T> GetField(int field) const
{ return cast_intrusive<T>(GetField(field)); }
IntrusivePtr<Val> LookupWithDefault(int field) const;
/**

View file

@ -263,7 +263,7 @@ refine connection KRB_Conn += {
rv->Assign(1, val_mgr->Bool(${msg.ap_options.mutual_required}));
auto rvticket = proc_ticket(${msg.ticket});
auto authenticationinfo = bro_analyzer()->GetAuthenticationInfo(rvticket->Lookup(2)->AsString(), rvticket->Lookup(4)->AsString(), rvticket->Lookup(3)->AsCount());
auto authenticationinfo = bro_analyzer()->GetAuthenticationInfo(rvticket->GetField(2)->AsString(), rvticket->GetField(4)->AsString(), rvticket->GetField(3)->AsCount());
if ( authenticationinfo )
rvticket->Assign(5, authenticationinfo);

View file

@ -175,7 +175,7 @@ bool NFS_Interp::RPC_BuildReply(RPC_CallInfo* c, BifEnum::rpc_status rpc_status,
case BifEnum::NFS3::PROC_READ:
bro_uint_t offset;
offset = c->RequestVal()->AsRecordVal()->Lookup(1)->AsCount();
offset = c->RequestVal()->AsRecordVal()->GetField(1)->AsCount();
reply = nfs3_read_reply(buf, n, nfs_status, offset);
event = nfs_proc_read;
break;

View file

@ -125,7 +125,7 @@ bool PortmapperInterp::RPC_BuildReply(RPC_CallInfo* c, BifEnum::rpc_status statu
return false;
RecordVal* rv = c->RequestVal()->AsRecordVal();
Val* is_tcp = rv->Lookup(2);
const auto& is_tcp = rv->GetField(2);
reply = val_mgr->Port(CheckPort(port), is_tcp->IsOne() ?
TRANSPORT_TCP : TRANSPORT_UDP);
event = pm_request_getport;

View file

@ -1098,7 +1098,7 @@ void TCP_Analyzer::DeliverPacket(int len, const u_char* data, bool is_orig,
{
syn_weirds(flags, endpoint, len);
RecordVal* SYN_vals = build_syn_packet_val(is_orig, ip, tp);
init_window(endpoint, peer, flags, SYN_vals->Lookup(5)->CoerceToInt(),
init_window(endpoint, peer, flags, SYN_vals->GetField(5)->CoerceToInt(),
base_seq, ack_seq);
if ( connection_SYN_packet )

View file

@ -1124,7 +1124,7 @@ IntrusivePtr<EnumVal> bro_broker::get_data_type(RecordVal* v, Frame* frame)
broker::data& bro_broker::opaque_field_to_data(RecordVal* v, Frame* f)
{
Val* d = v->Lookup(0);
const auto& d = v->GetField(0);
if ( ! d )
reporter->RuntimeError(f->GetCall()->GetLocationInfo(),
@ -1132,7 +1132,7 @@ broker::data& bro_broker::opaque_field_to_data(RecordVal* v, Frame* f)
// RuntimeError throws an exception which causes this line to never exceute.
// NOLINTNEXTLINE(clang-analyzer-core.uninitialized.UndefReturn)
return static_cast<DataVal*>(d)->data;
return static_cast<DataVal*>(d.get())->data;
}
void bro_broker::DataVal::ValDescribe(ODesc* d) const

View file

@ -386,18 +386,18 @@ bool Manager::PublishEvent(string topic, RecordVal* args)
if ( peer_count == 0 )
return true;
if ( ! args->Lookup(0) )
if ( ! args->GetField(0) )
return false;
auto event_name = args->Lookup(0)->AsString()->CheckString();
auto vv = args->Lookup(1)->AsVectorVal();
auto event_name = args->GetField(0)->AsString()->CheckString();
auto vv = args->GetField(1)->AsVectorVal();
broker::vector xs;
xs.reserve(vv->Size());
for ( auto i = 0u; i < vv->Size(); ++i )
{
auto val = vv->Lookup(i)->AsRecordVal()->Lookup(0);
auto data_val = static_cast<DataVal*>(val);
const auto& val = vv->Lookup(i)->AsRecordVal()->GetField(0);
auto data_val = static_cast<DataVal*>(val.get());
xs.emplace_back(data_val->data);
}
@ -759,7 +759,7 @@ RecordVal* Manager::MakeEvent(val_list* args, Frame* frame)
else
data_val = make_data_val((*args)[i]);
if ( ! data_val->Lookup(0) )
if ( ! data_val->GetField(0) )
{
rval->Assign(0, nullptr);
Error("failed to convert param #%d of type %s to broker data",

View file

@ -104,15 +104,15 @@ broker::backend_options to_backend_options(broker::backend backend,
switch ( backend ) {
case broker::sqlite:
{
auto path = options->Lookup(0)->AsRecordVal()
->Lookup(0)->AsStringVal()->CheckString();
auto path = options->GetField(0)->AsRecordVal()
->GetField(0)->AsStringVal()->CheckString();
return {{"path", path}};
}
case broker::rocksdb:
{
auto path = options->Lookup(1)->AsRecordVal()
->Lookup(0)->AsStringVal()->CheckString();
auto path = options->GetField(1)->AsRecordVal()
->GetField(0)->AsStringVal()->CheckString();
return {{"path", path}};
}

View file

@ -21,7 +21,7 @@
using namespace file_analysis;
static IntrusivePtr<Val> empty_connection_table()
static IntrusivePtr<TableVal> empty_connection_table()
{
auto tbl_index = make_intrusive<TypeList>(zeek::id::conn_id);
tbl_index->Append(zeek::id::conn_id);
@ -121,7 +121,7 @@ void File::UpdateLastActivityTime()
double File::GetLastActivityTime() const
{
return val->Lookup(last_active_idx)->AsTime();
return val->GetField(last_active_idx)->AsTime();
}
bool File::UpdateConnectionFields(Connection* conn, bool is_orig)
@ -129,7 +129,7 @@ bool File::UpdateConnectionFields(Connection* conn, bool is_orig)
if ( ! conn )
return false;
Val* conns = val->Lookup(conns_idx);
Val* conns = val->GetField(conns_idx).get();
if ( ! conns )
{
@ -184,7 +184,7 @@ int File::Idx(const std::string& field, const RecordType* type)
std::string File::GetSource() const
{
Val* v = val->Lookup(source_idx);
const auto& v = val->GetField(source_idx);
return v ? v->AsString()->CheckString() : std::string();
}
@ -234,7 +234,8 @@ void File::SetTotalBytes(uint64_t size)
bool File::IsComplete() const
{
Val* total = val->Lookup(total_bytes_idx);
const auto& total = val->GetField(total_bytes_idx);
if ( ! total )
return false;
@ -308,7 +309,7 @@ void File::InferMetadata()
{
did_metadata_inference = true;
Val* bof_buffer_val = val->Lookup(bof_buffer_idx);
Val* bof_buffer_val = val->GetField(bof_buffer_idx).get();
if ( ! bof_buffer_val )
{
@ -317,7 +318,7 @@ void File::InferMetadata()
BroString* bs = concatenate(bof_buffer.chunks);
val->Assign<StringVal>(bof_buffer_idx, bs);
bof_buffer_val = val->Lookup(bof_buffer_idx);
bof_buffer_val = val->GetField(bof_buffer_idx).get();
}
if ( ! FileEventAvailable(file_sniff) )

View file

@ -1089,7 +1089,7 @@ threading::Value** Manager::RecordToFilterVals(Stream* stream, Filter* filter,
for ( list<int>::iterator j = indices.begin(); j != indices.end(); ++j )
{
val = val->AsRecordVal()->Lookup(*j);
val = val->AsRecordVal()->GetField(*j).get();
if ( ! val )
{

View file

@ -81,7 +81,7 @@ function Option::set%(ID: string, val: any, location: string &default=""%): bool
if ( same_type(val->GetType().get(), bro_broker::DataVal::ScriptDataType()) )
{
auto dv = static_cast<bro_broker::DataVal*>(val->AsRecordVal()->Lookup(0));
auto dv = static_cast<bro_broker::DataVal*>(val->AsRecordVal()->GetField(0).get());
auto val_from_data = dv->castTo(i->GetType().get());
if ( ! val_from_data )

View file

@ -138,7 +138,7 @@ function Reporter::conn_weird%(name: string, c: connection, addl: string &defaul
## Returns: true if the file was still valid, else false.
function Reporter::file_weird%(name: string, f: fa_file, addl: string &default=""%): bool
%{
auto fuid = f->AsRecordVal()->Lookup(0)->AsStringVal();
auto fuid = f->AsRecordVal()->GetField(0)->AsStringVal();
auto file = file_mgr->LookupFile(fuid->CheckString());
if ( ! file )

View file

@ -681,8 +681,8 @@ function string_to_ascii_hex%(s: string%): string
## Returns: The result of the Smith-Waterman algorithm calculation.
function str_smith_waterman%(s1: string, s2: string, params: sw_params%) : sw_substring_vec
%{
SWParams sw_params(params->AsRecordVal()->Lookup(0)->AsCount(),
SWVariant(params->AsRecordVal()->Lookup(1)->AsCount()));
SWParams sw_params(params->AsRecordVal()->GetField(0)->AsCount(),
SWVariant(params->AsRecordVal()->GetField(1)->AsCount()));
BroSubstring::Vec* subseq =
smith_waterman(s1->AsString(), s2->AsString(), sw_params);