mirror of
https://github.com/zeek/zeek.git
synced 2025-10-06 08:38:20 +00:00
Merge remote-tracking branch 'origin/topic/vern/zval'
* origin/topic/vern/zval: (42 commits) whitespace tweaks resolved some TODO comments remove unnecessary casts, and change necessary ones to use static_cast<> explain cmp_func default change functions for ZVal type management to static members fix some unsigned/signed integer warnings address lint concern about uninitialized variable Remove use of obsolete forward-declaration macros fix #include's that lack zeek/ prefixes explicitly populate holes created in vectors fixes for now-incorrect assumption that GetField always returns an existing ValPtr memory management for assignment to vector elements memory management for assignment to record fields destructor cleanup from ZAM_vector/ZAM_record fix #include's that lack zeek/ prefixes overlooked another way in which vector holes can be created initialize vector holes to the correct corresponding type explicitly populate holes created in vectors fix other instances of GetField().get() assuming long-lived ValPtr's fix for now-incorrect assumption that GetField always returns an existing ValPtr ...
This commit is contained in:
commit
f45df63cd0
100 changed files with 2376 additions and 1386 deletions
85
src/Expr.cc
85
src/Expr.cc
|
@ -277,7 +277,7 @@ const char* assign_to_index(ValPtr v1, ValPtr v2, ValPtr v3,
|
|||
|
||||
for ( auto idx = 0u; idx < v_vect->Size();
|
||||
idx++, first++ )
|
||||
v1_vect->Insert(first, v_vect->At(idx));
|
||||
v1_vect->Insert(first, v_vect->ValAt(idx));
|
||||
}
|
||||
|
||||
else if ( ! v1_vect->Assign(lv->Idx(0)->CoerceToUnsigned(), std::move(v3)) )
|
||||
|
@ -619,8 +619,11 @@ ValPtr UnaryExpr::Eval(Frame* f) const
|
|||
|
||||
for ( unsigned int i = 0; i < v_op->Size(); ++i )
|
||||
{
|
||||
const auto& v_i = v_op->At(i);
|
||||
result->Assign(i, v_i ? Fold(v_i.get()) : nullptr);
|
||||
auto vop = v_op->ValAt(i);
|
||||
if ( vop )
|
||||
result->Assign(i, Fold(vop.get()));
|
||||
else
|
||||
result->Assign(i, nullptr);
|
||||
}
|
||||
|
||||
return result;
|
||||
|
@ -708,11 +711,12 @@ ValPtr BinaryExpr::Eval(Frame* f) const
|
|||
|
||||
for ( unsigned int i = 0; i < v_op1->Size(); ++i )
|
||||
{
|
||||
if ( v_op1->At(i) && v_op2->At(i) )
|
||||
v_result->Assign(i, Fold(v_op1->At(i).get(), v_op2->At(i).get()));
|
||||
auto v1_i = v_op1->ValAt(i);
|
||||
auto v2_i = v_op2->ValAt(i);
|
||||
if ( v1_i && v2_i )
|
||||
v_result->Assign(i, Fold(v_op1->ValAt(i).get(), v_op2->ValAt(i).get()));
|
||||
else
|
||||
v_result->Assign(i, nullptr);
|
||||
// SetError("undefined element in vector operation");
|
||||
}
|
||||
|
||||
return v_result;
|
||||
|
@ -725,13 +729,12 @@ ValPtr BinaryExpr::Eval(Frame* f) const
|
|||
|
||||
for ( unsigned int i = 0; i < vv->Size(); ++i )
|
||||
{
|
||||
if ( const auto& vv_i = vv->At(i) )
|
||||
auto vv_i = vv->ValAt(i);
|
||||
if ( vv_i )
|
||||
v_result->Assign(i, is_vec1 ? Fold(vv_i.get(), v2.get())
|
||||
: Fold(v1.get(), vv_i.get()));
|
||||
else
|
||||
v_result->Assign(i, nullptr);
|
||||
|
||||
// SetError("Undefined element in vector operation");
|
||||
}
|
||||
|
||||
return v_result;
|
||||
|
@ -1235,12 +1238,8 @@ ValPtr IncrExpr::Eval(Frame* f) const
|
|||
|
||||
for ( unsigned int i = 0; i < v_vec->Size(); ++i )
|
||||
{
|
||||
const auto& elt = v_vec->At(i);
|
||||
|
||||
if ( elt )
|
||||
v_vec->Assign(i, DoSingleEval(f, elt.get()));
|
||||
else
|
||||
v_vec->Assign(i, nullptr);
|
||||
auto elt = v_vec->ValAt(i);
|
||||
v_vec->Assign(i, DoSingleEval(f, elt.get()));
|
||||
}
|
||||
|
||||
op->Assign(f, std::move(v_vec));
|
||||
|
@ -1863,18 +1862,13 @@ ValPtr BoolExpr::Eval(Frame* f) const
|
|||
|
||||
for ( unsigned int i = 0; i < vec_v1->Size(); ++i )
|
||||
{
|
||||
const auto& op1 = vec_v1->At(i);
|
||||
const auto& op2 = vec_v2->At(i);
|
||||
if ( op1 && op2 )
|
||||
{
|
||||
bool local_result = (tag == EXPR_AND_AND) ?
|
||||
(! op1->IsZero() && ! op2->IsZero()) :
|
||||
(! op1->IsZero() || ! op2->IsZero());
|
||||
const auto op1 = vec_v1->BoolAt(i);
|
||||
const auto op2 = vec_v2->BoolAt(i);
|
||||
|
||||
result->Assign(i, val_mgr->Bool(local_result));
|
||||
}
|
||||
else
|
||||
result->Assign(i, nullptr);
|
||||
bool local_result =
|
||||
(tag == EXPR_AND_AND) ? (op1 && op2) : (op1 || op2);
|
||||
|
||||
result->Assign(i, val_mgr->Bool(local_result));
|
||||
}
|
||||
|
||||
return result;
|
||||
|
@ -2225,15 +2219,9 @@ ValPtr CondExpr::Eval(Frame* f) const
|
|||
|
||||
for ( unsigned int i = 0; i < cond->Size(); ++i )
|
||||
{
|
||||
const auto& local_cond = cond->At(i);
|
||||
|
||||
if ( local_cond )
|
||||
{
|
||||
const auto& v = local_cond->IsZero() ? b->At(i) : a->At(i);
|
||||
result->Assign(i, v);
|
||||
}
|
||||
else
|
||||
result->Assign(i, nullptr);
|
||||
auto local_cond = cond->BoolAt(i);
|
||||
auto v = local_cond ? a->ValAt(i) : b->ValAt(i);
|
||||
result->Assign(i, v);
|
||||
}
|
||||
|
||||
return result;
|
||||
|
@ -2912,8 +2900,8 @@ ValPtr IndexExpr::Eval(Frame* f) const
|
|||
|
||||
for ( unsigned int i = 0; i < v_v2->Size(); ++i )
|
||||
{
|
||||
if ( v_v2->At(i)->AsBool() )
|
||||
v_result->Assign(v_result->Size() + 1, v_v1->At(i));
|
||||
if ( v_v2->BoolAt(i) )
|
||||
v_result->Assign(v_result->Size() + 1, v_v1->ValAt(i));
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -2923,7 +2911,7 @@ ValPtr IndexExpr::Eval(Frame* f) const
|
|||
// Probably only do this if *all* are negative.
|
||||
v_result->Resize(v_v2->Size());
|
||||
for ( unsigned int i = 0; i < v_v2->Size(); ++i )
|
||||
v_result->Assign(i, v_v1->At(v_v2->At(i)->CoerceToInt()));
|
||||
v_result->Assign(i, v_v1->ValAt(v_v2->ValAt(i)->CoerceToInt()));
|
||||
}
|
||||
|
||||
return v_result;
|
||||
|
@ -2946,7 +2934,7 @@ ValPtr IndexExpr::Fold(Val* v1, Val* v2) const
|
|||
const ListVal* lv = v2->AsListVal();
|
||||
|
||||
if ( lv->Length() == 1 )
|
||||
v = vect->At(lv->Idx(0)->CoerceToUnsigned());
|
||||
v = vect->ValAt(lv->Idx(0)->CoerceToUnsigned());
|
||||
else
|
||||
{
|
||||
size_t len = vect->Size();
|
||||
|
@ -2961,7 +2949,7 @@ ValPtr IndexExpr::Fold(Val* v1, Val* v2) const
|
|||
result->Resize(sub_length);
|
||||
|
||||
for ( bro_int_t idx = first; idx < last; idx++ )
|
||||
result->Assign(idx - first, vect->At(idx));
|
||||
result->Assign(idx - first, vect->ValAt(idx));
|
||||
}
|
||||
|
||||
return result;
|
||||
|
@ -3161,7 +3149,7 @@ HasFieldExpr::~HasFieldExpr()
|
|||
ValPtr HasFieldExpr::Fold(Val* v) const
|
||||
{
|
||||
auto rv = v->AsRecordVal();
|
||||
return val_mgr->Bool(rv->GetField(field) != nullptr);
|
||||
return val_mgr->Bool(rv->HasField(field));
|
||||
}
|
||||
|
||||
void HasFieldExpr::ExprDescribe(ODesc* d) const
|
||||
|
@ -3749,7 +3737,8 @@ ValPtr ArithCoerceExpr::Fold(Val* v) const
|
|||
|
||||
for ( unsigned int i = 0; i < vv->Size(); ++i )
|
||||
{
|
||||
if ( const auto& elt = vv->At(i) )
|
||||
auto elt = vv->ValAt(i);
|
||||
if ( elt )
|
||||
result->Assign(i, FoldSingleVal(elt.get(), t));
|
||||
else
|
||||
result->Assign(i, nullptr);
|
||||
|
@ -3917,7 +3906,7 @@ ValPtr RecordCoerceExpr::Fold(Val* v) const
|
|||
if ( ! rhs )
|
||||
{
|
||||
// Optional field is missing.
|
||||
val->Assign(i, nullptr);
|
||||
val->Remove(i);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -3964,7 +3953,7 @@ ValPtr RecordCoerceExpr::Fold(Val* v) const
|
|||
val->Assign(i, std::move(def_val));
|
||||
}
|
||||
else
|
||||
val->Assign(i, nullptr);
|
||||
val->Remove(i);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4207,7 +4196,11 @@ ValPtr InExpr::Fold(Val* v1, Val* v2) const
|
|||
bool res;
|
||||
|
||||
if ( is_vector(v2) )
|
||||
res = (bool)v2->AsVectorVal()->At(v1->AsListVal()->Idx(0)->CoerceToUnsigned());
|
||||
{
|
||||
auto vv2 = v2->AsVectorVal();
|
||||
auto ind = v1->AsListVal()->Idx(0)->CoerceToUnsigned();
|
||||
res = ind < vv2->Size() && vv2->ValAt(ind);
|
||||
}
|
||||
else
|
||||
res = (bool)v2->AsTableVal()->Find({NewRef{}, v1});
|
||||
|
||||
|
@ -5087,7 +5080,7 @@ ValPtr CastExpr::Eval(Frame* f) const
|
|||
d.Add("'");
|
||||
|
||||
if ( same_type(v->GetType(), Broker::detail::DataVal::ScriptDataType()) &&
|
||||
! v->AsRecordVal()->GetField(0) )
|
||||
! v->AsRecordVal()->HasField(0) )
|
||||
d.Add(" (nil $data field)");
|
||||
|
||||
RuntimeError(d.Description());
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue