mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 14:48:21 +00:00
Deprecate BroType::YieldType(), replace with Yield()
This commit is contained in:
parent
bb25f5d568
commit
f26904e031
19 changed files with 156 additions and 190 deletions
2
NEWS
2
NEWS
|
@ -151,6 +151,8 @@ Deprecated Functionality
|
|||
- ``BroType::HasField()`` and ``BroType::FieldType()`` are deprecated, use
|
||||
the methods of ``RecordType`` directly.
|
||||
|
||||
- ``BroType::YieldType()`` is deprecated, use ``BroType::Yield()``.
|
||||
|
||||
Zeek 3.1.0
|
||||
==========
|
||||
|
||||
|
|
12
src/Attr.cc
12
src/Attr.cc
|
@ -273,7 +273,7 @@ void Attributes::CheckAttr(Attr* a)
|
|||
}
|
||||
|
||||
FuncType* aft = at->AsFuncType();
|
||||
if ( ! same_type(aft->YieldType(), type.get()) )
|
||||
if ( ! same_type(aft->Yield().get(), type.get()) )
|
||||
{
|
||||
a->AttrExpr()->Error(
|
||||
is_add ?
|
||||
|
@ -328,7 +328,7 @@ void Attributes::CheckAttr(Attr* a)
|
|||
}
|
||||
|
||||
TableType* tt = type->AsTableType();
|
||||
BroType* ytype = tt->YieldType();
|
||||
BroType* ytype = tt->Yield().get();
|
||||
|
||||
if ( ! in_record )
|
||||
{
|
||||
|
@ -340,7 +340,7 @@ void Attributes::CheckAttr(Attr* a)
|
|||
{
|
||||
FuncType* f = atype->AsFuncType();
|
||||
if ( ! f->CheckArgs(tt->IndexTypes()) ||
|
||||
! same_type(f->YieldType(), ytype) )
|
||||
! same_type(f->Yield().get(), ytype) )
|
||||
Error("&default function type clash");
|
||||
|
||||
// Ok.
|
||||
|
@ -453,7 +453,7 @@ void Attributes::CheckAttr(Attr* a)
|
|||
|
||||
const FuncType* e_ft = expire_func->Type()->AsFuncType();
|
||||
|
||||
if ( e_ft->YieldType()->Tag() != TYPE_INTERVAL )
|
||||
if ( e_ft->Yield()->Tag() != TYPE_INTERVAL )
|
||||
{
|
||||
Error("&expire_func must yield a value of type interval");
|
||||
break;
|
||||
|
@ -500,7 +500,7 @@ void Attributes::CheckAttr(Attr* a)
|
|||
|
||||
const FuncType* c_ft = change_func->Type()->AsFuncType();
|
||||
|
||||
if ( c_ft->YieldType()->Tag() != TYPE_VOID )
|
||||
if ( c_ft->Yield()->Tag() != TYPE_VOID )
|
||||
{
|
||||
Error("&on_change must not return a value");
|
||||
break;
|
||||
|
@ -542,7 +542,7 @@ void Attributes::CheckAttr(Attr* a)
|
|||
}
|
||||
|
||||
if ( ! type->IsSet() )
|
||||
if ( ! same_type(args[2+t_indexes.size()].get(), the_table->YieldType()) )
|
||||
if ( ! same_type(args[2+t_indexes.size()].get(), the_table->Yield().get()) )
|
||||
{
|
||||
Error("&on_change: value type does not match table");
|
||||
break;
|
||||
|
|
|
@ -277,7 +277,7 @@ char* CompositeHash::SingleValHash(bool type_check, char* kp0,
|
|||
if ( val )
|
||||
{
|
||||
if ( ! (kp1 = SingleValHash(type_check, kp1,
|
||||
vt->YieldType(), val, false)) )
|
||||
vt->Yield().get(), val, false)) )
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
@ -570,7 +570,7 @@ int CompositeHash::SingleTypeKeySize(BroType* bt, const Val* v,
|
|||
sz = SizeAlign(sz, sizeof(unsigned int));
|
||||
sz = SizeAlign(sz, sizeof(unsigned int));
|
||||
if ( val )
|
||||
sz = SingleTypeKeySize(bt->AsVectorType()->YieldType(),
|
||||
sz = SingleTypeKeySize(bt->AsVectorType()->Yield().get(),
|
||||
val, type_check, sz, false,
|
||||
calc_static_size);
|
||||
if ( ! sz ) return 0;
|
||||
|
@ -956,7 +956,7 @@ const char* CompositeHash::RecoverOneVal(const HashKey* k, const char* kp0,
|
|||
else
|
||||
{
|
||||
IntrusivePtr<Val> value;
|
||||
kp1 = RecoverOneVal(k, kp1, k_end, tt->YieldType(), &value,
|
||||
kp1 = RecoverOneVal(k, kp1, k_end, tt->Yield().get(), &value,
|
||||
false);
|
||||
tv->Assign(key.get(), std::move(value));
|
||||
}
|
||||
|
@ -986,7 +986,7 @@ const char* CompositeHash::RecoverOneVal(const HashKey* k, const char* kp0,
|
|||
IntrusivePtr<Val> value;
|
||||
|
||||
if ( have_val )
|
||||
kp1 = RecoverOneVal(k, kp1, k_end, vt->YieldType(), &value,
|
||||
kp1 = RecoverOneVal(k, kp1, k_end, vt->Yield().get(), &value,
|
||||
false);
|
||||
|
||||
vv->Assign(index, std::move(value));
|
||||
|
|
90
src/Expr.cc
90
src/Expr.cc
|
@ -676,7 +676,7 @@ IntrusivePtr<Val> BinaryExpr::Fold(Val* v1, Val* v2) const
|
|||
BroType* ret_type = Type();
|
||||
|
||||
if ( IsVector(ret_type->Tag()) )
|
||||
ret_type = ret_type->YieldType();
|
||||
ret_type = ret_type->Yield().get();
|
||||
|
||||
if ( ret_type->Tag() == TYPE_INTERVAL )
|
||||
return make_intrusive<IntervalVal>(d3, 1.0);
|
||||
|
@ -863,9 +863,9 @@ void BinaryExpr::PromoteOps(TypeTag t)
|
|||
bool is_vec2 = IsVector(bt2);
|
||||
|
||||
if ( is_vec1 )
|
||||
bt1 = op1->Type()->AsVectorType()->YieldType()->Tag();
|
||||
bt1 = op1->Type()->AsVectorType()->Yield()->Tag();
|
||||
if ( is_vec2 )
|
||||
bt2 = op2->Type()->AsVectorType()->YieldType()->Tag();
|
||||
bt2 = op2->Type()->AsVectorType()->Yield()->Tag();
|
||||
|
||||
if ( (is_vec1 || is_vec2) && ! (is_vec1 && is_vec2) )
|
||||
reporter->Warning("mixing vector and scalar operands is deprecated");
|
||||
|
@ -922,7 +922,7 @@ IncrExpr::IncrExpr(BroExprTag arg_tag, IntrusivePtr<Expr> arg_op)
|
|||
|
||||
if ( IsVector(t->Tag()) )
|
||||
{
|
||||
if ( ! IsIntegral(t->AsVectorType()->YieldType()->Tag()) )
|
||||
if ( ! IsIntegral(t->AsVectorType()->Yield()->Tag()) )
|
||||
ExprError("vector elements must be integral for increment operator");
|
||||
else
|
||||
{
|
||||
|
@ -956,7 +956,7 @@ IntrusivePtr<Val> IncrExpr::DoSingleEval(Frame* f, Val* v) const
|
|||
|
||||
BroType* ret_type = Type();
|
||||
if ( IsVector(ret_type->Tag()) )
|
||||
ret_type = Type()->YieldType();
|
||||
ret_type = Type()->Yield().get();
|
||||
|
||||
if ( ret_type->Tag() == TYPE_INT )
|
||||
return val_mgr->Int(k);
|
||||
|
@ -1050,7 +1050,7 @@ PosExpr::PosExpr(IntrusivePtr<Expr> arg_op)
|
|||
BroType* t = op->Type();
|
||||
|
||||
if ( IsVector(t->Tag()) )
|
||||
t = t->AsVectorType()->YieldType();
|
||||
t = t->AsVectorType()->Yield().get();
|
||||
|
||||
TypeTag bt = t->Tag();
|
||||
IntrusivePtr<BroType> base_result_type;
|
||||
|
@ -1088,7 +1088,7 @@ NegExpr::NegExpr(IntrusivePtr<Expr> arg_op)
|
|||
BroType* t = op->Type();
|
||||
|
||||
if ( IsVector(t->Tag()) )
|
||||
t = t->AsVectorType()->YieldType();
|
||||
t = t->AsVectorType()->Yield().get();
|
||||
|
||||
TypeTag bt = t->Tag();
|
||||
IntrusivePtr<BroType> base_result_type;
|
||||
|
@ -1153,12 +1153,12 @@ AddExpr::AddExpr(IntrusivePtr<Expr> arg_op1, IntrusivePtr<Expr> arg_op2)
|
|||
TypeTag bt1 = op1->Type()->Tag();
|
||||
|
||||
if ( IsVector(bt1) )
|
||||
bt1 = op1->Type()->AsVectorType()->YieldType()->Tag();
|
||||
bt1 = op1->Type()->AsVectorType()->Yield()->Tag();
|
||||
|
||||
TypeTag bt2 = op2->Type()->Tag();
|
||||
|
||||
if ( IsVector(bt2) )
|
||||
bt2 = op2->Type()->AsVectorType()->YieldType()->Tag();
|
||||
bt2 = op2->Type()->AsVectorType()->Yield()->Tag();
|
||||
|
||||
IntrusivePtr<BroType> base_result_type;
|
||||
|
||||
|
@ -1209,7 +1209,7 @@ AddToExpr::AddToExpr(IntrusivePtr<Expr> arg_op1, IntrusivePtr<Expr> arg_op2)
|
|||
|
||||
else if ( IsVector(bt1) )
|
||||
{
|
||||
bt1 = op1->Type()->AsVectorType()->YieldType()->Tag();
|
||||
bt1 = op1->Type()->AsVectorType()->Yield()->Tag();
|
||||
|
||||
if ( IsArithmetic(bt1) )
|
||||
{
|
||||
|
@ -1279,11 +1279,11 @@ SubExpr::SubExpr(IntrusivePtr<Expr> arg_op1, IntrusivePtr<Expr> arg_op2)
|
|||
|
||||
TypeTag bt1 = t1->Tag();
|
||||
if ( IsVector(bt1) )
|
||||
bt1 = t1->AsVectorType()->YieldType()->Tag();
|
||||
bt1 = t1->AsVectorType()->Yield()->Tag();
|
||||
|
||||
TypeTag bt2 = t2->Tag();
|
||||
if ( IsVector(bt2) )
|
||||
bt2 = t2->AsVectorType()->YieldType()->Tag();
|
||||
bt2 = t2->AsVectorType()->Yield()->Tag();
|
||||
|
||||
IntrusivePtr<BroType> base_result_type;
|
||||
|
||||
|
@ -1366,12 +1366,12 @@ TimesExpr::TimesExpr(IntrusivePtr<Expr> arg_op1, IntrusivePtr<Expr> arg_op2)
|
|||
TypeTag bt1 = op1->Type()->Tag();
|
||||
|
||||
if ( IsVector(bt1) )
|
||||
bt1 = op1->Type()->AsVectorType()->YieldType()->Tag();
|
||||
bt1 = op1->Type()->AsVectorType()->Yield()->Tag();
|
||||
|
||||
TypeTag bt2 = op2->Type()->Tag();
|
||||
|
||||
if ( IsVector(bt2) )
|
||||
bt2 = op2->Type()->AsVectorType()->YieldType()->Tag();
|
||||
bt2 = op2->Type()->AsVectorType()->Yield()->Tag();
|
||||
|
||||
if ( bt1 == TYPE_INTERVAL || bt2 == TYPE_INTERVAL )
|
||||
{
|
||||
|
@ -1403,12 +1403,12 @@ DivideExpr::DivideExpr(IntrusivePtr<Expr> arg_op1,
|
|||
TypeTag bt1 = op1->Type()->Tag();
|
||||
|
||||
if ( IsVector(bt1) )
|
||||
bt1 = op1->Type()->AsVectorType()->YieldType()->Tag();
|
||||
bt1 = op1->Type()->AsVectorType()->Yield()->Tag();
|
||||
|
||||
TypeTag bt2 = op2->Type()->Tag();
|
||||
|
||||
if ( IsVector(bt2) )
|
||||
bt2 = op2->Type()->AsVectorType()->YieldType()->Tag();
|
||||
bt2 = op2->Type()->AsVectorType()->Yield()->Tag();
|
||||
|
||||
if ( bt1 == TYPE_INTERVAL || bt2 == TYPE_INTERVAL )
|
||||
{
|
||||
|
@ -1470,12 +1470,12 @@ ModExpr::ModExpr(IntrusivePtr<Expr> arg_op1, IntrusivePtr<Expr> arg_op2)
|
|||
TypeTag bt1 = op1->Type()->Tag();
|
||||
|
||||
if ( IsVector(bt1) )
|
||||
bt1 = op1->Type()->AsVectorType()->YieldType()->Tag();
|
||||
bt1 = op1->Type()->AsVectorType()->Yield()->Tag();
|
||||
|
||||
TypeTag bt2 = op2->Type()->Tag();
|
||||
|
||||
if ( IsVector(bt2) )
|
||||
bt2 = op2->Type()->AsVectorType()->YieldType()->Tag();
|
||||
bt2 = op2->Type()->AsVectorType()->Yield()->Tag();
|
||||
|
||||
if ( BothIntegral(bt1, bt2) )
|
||||
PromoteType(max_type(bt1, bt2), is_vector(op1.get()) || is_vector(op2.get()));
|
||||
|
@ -1493,12 +1493,12 @@ BoolExpr::BoolExpr(BroExprTag arg_tag,
|
|||
TypeTag bt1 = op1->Type()->Tag();
|
||||
|
||||
if ( IsVector(bt1) )
|
||||
bt1 = op1->Type()->AsVectorType()->YieldType()->Tag();
|
||||
bt1 = op1->Type()->AsVectorType()->Yield()->Tag();
|
||||
|
||||
TypeTag bt2 = op2->Type()->Tag();
|
||||
|
||||
if ( IsVector(bt2) )
|
||||
bt2 = op2->Type()->AsVectorType()->YieldType()->Tag();
|
||||
bt2 = op2->Type()->AsVectorType()->Yield()->Tag();
|
||||
|
||||
if ( BothBool(bt1, bt2) )
|
||||
{
|
||||
|
@ -1643,12 +1643,12 @@ BitExpr::BitExpr(BroExprTag arg_tag,
|
|||
TypeTag bt1 = t1->Tag();
|
||||
|
||||
if ( IsVector(bt1) )
|
||||
bt1 = t1->AsVectorType()->YieldType()->Tag();
|
||||
bt1 = t1->AsVectorType()->Yield()->Tag();
|
||||
|
||||
TypeTag bt2 = t2->Tag();
|
||||
|
||||
if ( IsVector(bt2) )
|
||||
bt2 = t2->AsVectorType()->YieldType()->Tag();
|
||||
bt2 = t2->AsVectorType()->Yield()->Tag();
|
||||
|
||||
if ( (bt1 == TYPE_COUNT || bt1 == TYPE_COUNTER) &&
|
||||
(bt2 == TYPE_COUNT || bt2 == TYPE_COUNTER) )
|
||||
|
@ -1697,11 +1697,11 @@ EqExpr::EqExpr(BroExprTag arg_tag,
|
|||
|
||||
TypeTag bt1 = t1->Tag();
|
||||
if ( IsVector(bt1) )
|
||||
bt1 = t1->AsVectorType()->YieldType()->Tag();
|
||||
bt1 = t1->AsVectorType()->Yield()->Tag();
|
||||
|
||||
TypeTag bt2 = t2->Tag();
|
||||
if ( IsVector(bt2) )
|
||||
bt2 = t2->AsVectorType()->YieldType()->Tag();
|
||||
bt2 = t2->AsVectorType()->Yield()->Tag();
|
||||
|
||||
if ( is_vector(op1.get()) || is_vector(op2.get()) )
|
||||
SetType(make_intrusive<VectorType>(base_type(TYPE_BOOL)));
|
||||
|
@ -1799,11 +1799,11 @@ RelExpr::RelExpr(BroExprTag arg_tag,
|
|||
|
||||
TypeTag bt1 = t1->Tag();
|
||||
if ( IsVector(bt1) )
|
||||
bt1 = t1->AsVectorType()->YieldType()->Tag();
|
||||
bt1 = t1->AsVectorType()->Yield()->Tag();
|
||||
|
||||
TypeTag bt2 = t2->Tag();
|
||||
if ( IsVector(bt2) )
|
||||
bt2 = t2->AsVectorType()->YieldType()->Tag();
|
||||
bt2 = t2->AsVectorType()->Yield()->Tag();
|
||||
|
||||
if ( is_vector(op1.get()) || is_vector(op2.get()) )
|
||||
SetType(make_intrusive<VectorType>(base_type(TYPE_BOOL)));
|
||||
|
@ -1851,7 +1851,7 @@ CondExpr::CondExpr(IntrusivePtr<Expr> arg_op1, IntrusivePtr<Expr> arg_op2,
|
|||
TypeTag bt1 = op1->Type()->Tag();
|
||||
|
||||
if ( IsVector(bt1) )
|
||||
bt1 = op1->Type()->AsVectorType()->YieldType()->Tag();
|
||||
bt1 = op1->Type()->AsVectorType()->Yield()->Tag();
|
||||
|
||||
if ( op1->IsError() || op2->IsError() || op3->IsError() )
|
||||
SetError();
|
||||
|
@ -1864,12 +1864,12 @@ CondExpr::CondExpr(IntrusivePtr<Expr> arg_op1, IntrusivePtr<Expr> arg_op2,
|
|||
TypeTag bt2 = op2->Type()->Tag();
|
||||
|
||||
if ( is_vector(op2.get()) )
|
||||
bt2 = op2->Type()->AsVectorType()->YieldType()->Tag();
|
||||
bt2 = op2->Type()->AsVectorType()->Yield()->Tag();
|
||||
|
||||
TypeTag bt3 = op3->Type()->Tag();
|
||||
|
||||
if ( IsVector(bt3) )
|
||||
bt3 = op3->Type()->AsVectorType()->YieldType()->Tag();
|
||||
bt3 = op3->Type()->AsVectorType()->Yield()->Tag();
|
||||
|
||||
if ( is_vector(op1.get()) && ! (is_vector(op2.get()) && is_vector(op3.get())) )
|
||||
{
|
||||
|
@ -2329,7 +2329,7 @@ void AssignExpr::EvalIntoAggregate(const BroType* t, Val* aggr, Frame* f) const
|
|||
TableVal* tv = aggr->AsTableVal();
|
||||
|
||||
auto index = op1->Eval(f);
|
||||
auto v = check_and_promote(op2->Eval(f), t->YieldType(), true);
|
||||
auto v = check_and_promote(op2->Eval(f), t->Yield().get(), true);
|
||||
|
||||
if ( ! index || ! v )
|
||||
return;
|
||||
|
@ -2395,10 +2395,10 @@ IntrusivePtr<Val> AssignExpr::InitVal(const BroType* t, IntrusivePtr<Val> aggr)
|
|||
|
||||
auto tv = cast_intrusive<TableVal>(std::move(aggr));
|
||||
const TableType* tt = tv->Type()->AsTableType();
|
||||
const BroType* yt = tv->Type()->YieldType();
|
||||
const auto& yt = tv->Type()->Yield();
|
||||
|
||||
auto index = op1->InitVal(tt->Indices(), nullptr);
|
||||
auto v = op2->InitVal(yt, nullptr);
|
||||
auto v = op2->InitVal(yt.get(), nullptr);
|
||||
|
||||
if ( ! index || ! v )
|
||||
return nullptr;
|
||||
|
@ -2491,7 +2491,7 @@ IndexExpr::IndexExpr(IntrusivePtr<Expr> arg_op1,
|
|||
SetError(error_msg.data());
|
||||
}
|
||||
|
||||
else if ( ! op1->Type()->YieldType() )
|
||||
else if ( ! op1->Type()->Yield() )
|
||||
{
|
||||
if ( IsString(op1->Type()->Tag()) && match_type == MATCHES_INDEX_SCALAR )
|
||||
SetType(base_type(TYPE_STRING));
|
||||
|
@ -2504,10 +2504,10 @@ IndexExpr::IndexExpr(IntrusivePtr<Expr> arg_op1,
|
|||
}
|
||||
|
||||
else if ( match_type == MATCHES_INDEX_SCALAR )
|
||||
SetType({NewRef{}, op1->Type()->YieldType()});
|
||||
SetType(op1->Type()->Yield());
|
||||
|
||||
else if ( match_type == MATCHES_INDEX_VECTOR )
|
||||
SetType(make_intrusive<VectorType>(IntrusivePtr{NewRef{}, op1->Type()->YieldType()}));
|
||||
SetType(make_intrusive<VectorType>(op1->Type()->Yield()));
|
||||
|
||||
else
|
||||
ExprError("Unknown MatchesIndex() return value");
|
||||
|
@ -2595,7 +2595,7 @@ IntrusivePtr<Val> IndexExpr::Eval(Frame* f) const
|
|||
auto v_result = make_intrusive<VectorVal>(Type()->AsVectorType());
|
||||
|
||||
// Booleans select each element (or not).
|
||||
if ( IsBool(v_v2->Type()->YieldType()->Tag()) )
|
||||
if ( IsBool(v_v2->Type()->Yield()->Tag()) )
|
||||
{
|
||||
if ( v_v1->Size() != v_v2->Size() )
|
||||
{
|
||||
|
@ -3343,7 +3343,7 @@ VectorConstructorExpr::VectorConstructorExpr(IntrusivePtr<ListExpr> constructor_
|
|||
}
|
||||
|
||||
if ( ! check_and_promote_exprs_to_type(op->AsListExpr(),
|
||||
type->AsVectorType()->YieldType()) )
|
||||
type->AsVectorType()->Yield().get()) )
|
||||
ExprError("inconsistent types in vector constructor");
|
||||
}
|
||||
|
||||
|
@ -3383,7 +3383,7 @@ IntrusivePtr<Val> VectorConstructorExpr::InitVal(const BroType* t, IntrusivePtr<
|
|||
loop_over_list(exprs, i)
|
||||
{
|
||||
Expr* e = exprs[i];
|
||||
auto v = check_and_promote(e->Eval(nullptr), t->YieldType(), true);
|
||||
auto v = check_and_promote(e->Eval(nullptr), t->Yield().get(), true);
|
||||
|
||||
if ( ! v || ! vec->Assign(i, std::move(v)) )
|
||||
{
|
||||
|
@ -3461,7 +3461,7 @@ ArithCoerceExpr::ArithCoerceExpr(IntrusivePtr<Expr> arg_op, TypeTag t)
|
|||
if ( IsVector(bt) )
|
||||
{
|
||||
SetType(make_intrusive<VectorType>(base_type(t)));
|
||||
vbt = op->Type()->AsVectorType()->YieldType()->Tag();
|
||||
vbt = op->Type()->AsVectorType()->Yield()->Tag();
|
||||
}
|
||||
else
|
||||
SetType(base_type(t));
|
||||
|
@ -3506,12 +3506,12 @@ IntrusivePtr<Val> ArithCoerceExpr::Fold(Val* v) const
|
|||
// invocation is being done per-element rather than on
|
||||
// the whole vector. Correct the type tag if necessary.
|
||||
if ( type->Tag() == TYPE_VECTOR )
|
||||
t = Type()->AsVectorType()->YieldType()->InternalType();
|
||||
t = Type()->AsVectorType()->Yield()->InternalType();
|
||||
|
||||
return FoldSingleVal(v, t);
|
||||
}
|
||||
|
||||
t = Type()->AsVectorType()->YieldType()->InternalType();
|
||||
t = Type()->AsVectorType()->Yield()->InternalType();
|
||||
|
||||
VectorVal* vv = v->AsVectorVal();
|
||||
auto result = make_intrusive<VectorVal>(Type()->AsVectorType());
|
||||
|
@ -4082,7 +4082,7 @@ CallExpr::CallExpr(IntrusivePtr<Expr> arg_func,
|
|||
SetError("argument type mismatch in function call");
|
||||
else
|
||||
{
|
||||
BroType* yield = func_type->YieldType();
|
||||
const auto& yield = func_type->Yield();
|
||||
|
||||
if ( ! yield )
|
||||
{
|
||||
|
@ -4110,7 +4110,7 @@ CallExpr::CallExpr(IntrusivePtr<Expr> arg_func,
|
|||
}
|
||||
}
|
||||
else
|
||||
SetType({NewRef{}, yield});
|
||||
SetType(yield);
|
||||
|
||||
// Check for call to built-ins that can be statically analyzed.
|
||||
IntrusivePtr<Val> func_val;
|
||||
|
@ -4385,7 +4385,7 @@ EventExpr::EventExpr(const char* arg_name, IntrusivePtr<ListExpr> arg_args)
|
|||
SetError("argument type mismatch in event invocation");
|
||||
else
|
||||
{
|
||||
if ( func_type->YieldType() )
|
||||
if ( func_type->Yield() )
|
||||
{
|
||||
Error("function invoked as an event");
|
||||
SetError();
|
||||
|
@ -4633,7 +4633,7 @@ IntrusivePtr<Val> ListExpr::InitVal(const BroType* t, IntrusivePtr<Val> aggr) co
|
|||
loop_over_list(exprs, i)
|
||||
{
|
||||
Expr* e = exprs[i];
|
||||
auto promoted_e = check_and_promote_expr(e, vec->Type()->AsVectorType()->YieldType());
|
||||
auto promoted_e = check_and_promote_expr(e, vec->Type()->AsVectorType()->Yield().get());
|
||||
|
||||
if ( promoted_e )
|
||||
e = promoted_e.get();
|
||||
|
|
|
@ -245,7 +245,7 @@ std::pair<bool, Val*> Func::HandlePluginResult(std::pair<bool, Val*> plugin_resu
|
|||
|
||||
case FUNC_FLAVOR_FUNCTION:
|
||||
{
|
||||
BroType* yt = FType()->YieldType();
|
||||
const auto& yt = FType()->Yield();
|
||||
|
||||
if ( (! yt) || yt->Tag() == TYPE_VOID )
|
||||
{
|
||||
|
@ -423,7 +423,7 @@ IntrusivePtr<Val> BroFunc::Call(const zeek::Args& args, Frame* parent) const
|
|||
|
||||
// Warn if the function returns something, but we returned from
|
||||
// the function without an explicit return, or without a value.
|
||||
else if ( FType()->YieldType() && FType()->YieldType()->Tag() != TYPE_VOID &&
|
||||
else if ( FType()->Yield() && FType()->Yield()->Tag() != TYPE_VOID &&
|
||||
(flow != FLOW_RETURN /* we fell off the end */ ||
|
||||
! result /* explicit return with no result */) &&
|
||||
! f->HasDelayed() )
|
||||
|
|
|
@ -141,7 +141,7 @@ RuleConditionEval::RuleConditionEval(const char* func)
|
|||
// Validate argument quantity and type.
|
||||
FuncType* f = id->Type()->AsFuncType();
|
||||
|
||||
if ( f->YieldType()->Tag() != TYPE_BOOL )
|
||||
if ( f->Yield()->Tag() != TYPE_BOOL )
|
||||
rules_error("eval function type must yield a 'bool'", func);
|
||||
|
||||
TypeList tl;
|
||||
|
|
|
@ -34,7 +34,7 @@ Scope::Scope(IntrusivePtr<ID> id, attr_list* al)
|
|||
reporter->InternalError("bad scope id");
|
||||
|
||||
FuncType* ft = id->Type()->AsFuncType();
|
||||
return_type = {NewRef{}, ft->YieldType()};
|
||||
return_type = ft->Yield();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
13
src/Stmt.cc
13
src/Stmt.cc
|
@ -1148,18 +1148,17 @@ ForStmt::ForStmt(id_list* arg_loop_vars,
|
|||
|
||||
if ( e->Type()->IsTable() )
|
||||
{
|
||||
BroType* yield_type = e->Type()->AsTableType()->YieldType();
|
||||
const auto& yield_type = e->Type()->AsTableType()->Yield();
|
||||
|
||||
// Verify value_vars type if its already been defined
|
||||
if ( value_var->Type() )
|
||||
{
|
||||
if ( ! same_type(value_var->Type(), yield_type) )
|
||||
value_var->Type()->Error("type clash in iteration", yield_type);
|
||||
if ( ! same_type(value_var->Type(), yield_type.get()) )
|
||||
value_var->Type()->Error("type clash in iteration", yield_type.get());
|
||||
}
|
||||
else
|
||||
{
|
||||
add_local(value_var, {NewRef{}, yield_type}, INIT_NONE,
|
||||
nullptr, nullptr, VAR_REGULAR);
|
||||
add_local(value_var, yield_type, INIT_NONE, nullptr, nullptr, VAR_REGULAR);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -1424,7 +1423,7 @@ ReturnStmt::ReturnStmt(IntrusivePtr<Expr> arg_e)
|
|||
}
|
||||
|
||||
FuncType* ft = s->ScopeID()->Type()->AsFuncType();
|
||||
BroType* yt = ft->YieldType();
|
||||
const auto& yt = ft->Yield();
|
||||
|
||||
if ( s->ScopeID()->DoInferReturnType() )
|
||||
{
|
||||
|
@ -1449,7 +1448,7 @@ ReturnStmt::ReturnStmt(IntrusivePtr<Expr> arg_e)
|
|||
|
||||
else
|
||||
{
|
||||
auto promoted_e = check_and_promote_expr(e.get(), yt);
|
||||
auto promoted_e = check_and_promote_expr(e.get(), yt.get());
|
||||
|
||||
if ( promoted_e )
|
||||
e = std::move(promoted_e);
|
||||
|
|
91
src/Type.cc
91
src/Type.cc
|
@ -109,9 +109,10 @@ int BroType::MatchesIndex(ListExpr* const index) const
|
|||
return DOES_NOT_MATCH_INDEX;
|
||||
}
|
||||
|
||||
BroType* BroType::YieldType()
|
||||
const IntrusivePtr<BroType>& BroType::Yield() const
|
||||
{
|
||||
return nullptr;
|
||||
static IntrusivePtr<BroType> nil;
|
||||
return nil;
|
||||
}
|
||||
|
||||
bool BroType::HasField(const char* /* field */) const
|
||||
|
@ -234,16 +235,6 @@ int IndexType::MatchesIndex(ListExpr* const index) const
|
|||
MATCHES_INDEX_SCALAR : DOES_NOT_MATCH_INDEX;
|
||||
}
|
||||
|
||||
BroType* IndexType::YieldType()
|
||||
{
|
||||
return yield_type.get();
|
||||
}
|
||||
|
||||
const BroType* IndexType::YieldType() const
|
||||
{
|
||||
return yield_type.get();
|
||||
}
|
||||
|
||||
void IndexType::Describe(ODesc* d) const
|
||||
{
|
||||
BroType::Describe(d);
|
||||
|
@ -481,16 +472,6 @@ string FuncType::FlavorString() const
|
|||
|
||||
FuncType::~FuncType() = default;
|
||||
|
||||
BroType* FuncType::YieldType()
|
||||
{
|
||||
return yield.get();
|
||||
}
|
||||
|
||||
const BroType* FuncType::YieldType() const
|
||||
{
|
||||
return yield.get();
|
||||
}
|
||||
|
||||
int FuncType::MatchesIndex(ListExpr* const index) const
|
||||
{
|
||||
return check_and_promote_args(index, args.get()) ?
|
||||
|
@ -785,7 +766,7 @@ static string container_type_name(const BroType* ft)
|
|||
if ( ft->Tag() == TYPE_RECORD )
|
||||
s = "record " + ft->GetName();
|
||||
else if ( ft->Tag() == TYPE_VECTOR )
|
||||
s = "vector of " + container_type_name(ft->YieldType());
|
||||
s = "vector of " + container_type_name(ft->Yield().get());
|
||||
else if ( ft->Tag() == TYPE_TABLE )
|
||||
{
|
||||
if ( ft->IsSet() )
|
||||
|
@ -802,10 +783,10 @@ static string container_type_name(const BroType* ft)
|
|||
s += container_type_name(tl[i].get());
|
||||
}
|
||||
s += "]";
|
||||
if ( ft->YieldType() )
|
||||
if ( ft->Yield() )
|
||||
{
|
||||
s += " of ";
|
||||
s += container_type_name(ft->YieldType());
|
||||
s += container_type_name(ft->Yield().get());
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -1070,11 +1051,6 @@ FileType::FileType(IntrusivePtr<BroType> yield_type)
|
|||
|
||||
FileType::~FileType() = default;
|
||||
|
||||
BroType* FileType::YieldType()
|
||||
{
|
||||
return yield.get();
|
||||
}
|
||||
|
||||
void FileType::Describe(ODesc* d) const
|
||||
{
|
||||
if ( d->IsReadable() )
|
||||
|
@ -1358,33 +1334,16 @@ IntrusivePtr<BroType> VectorType::ShallowClone()
|
|||
|
||||
VectorType::~VectorType() = default;
|
||||
|
||||
BroType* VectorType::YieldType()
|
||||
const IntrusivePtr<BroType>& VectorType::Yield() const
|
||||
{
|
||||
// Work around the fact that we use void internally to mark a vector
|
||||
// as being unspecified. When looking at its yield type, we need to
|
||||
// return any as that's what other code historically expects for type
|
||||
// comparisions.
|
||||
if ( IsUnspecifiedVector() )
|
||||
return ::base_type(TYPE_ANY).get();
|
||||
return ::base_type(TYPE_ANY);
|
||||
|
||||
return yield_type.get();
|
||||
}
|
||||
|
||||
const BroType* VectorType::YieldType() const
|
||||
{
|
||||
// Work around the fact that we use void internally to mark a vector
|
||||
// as being unspecified. When looking at its yield type, we need to
|
||||
// return any as that's what other code historically expects for type
|
||||
// comparisions.
|
||||
if ( IsUnspecifiedVector() )
|
||||
{
|
||||
auto ret = ::base_type(TYPE_ANY);
|
||||
assert(ret);
|
||||
// release, because this won't be held by anyone.
|
||||
return ret.release();
|
||||
}
|
||||
|
||||
return yield_type.get();
|
||||
return yield_type;
|
||||
}
|
||||
|
||||
int VectorType::MatchesIndex(ListExpr* const index) const
|
||||
|
@ -1397,8 +1356,8 @@ int VectorType::MatchesIndex(ListExpr* const index) const
|
|||
if ( el.length() == 2 )
|
||||
return MATCHES_INDEX_VECTOR;
|
||||
else if ( el[0]->Type()->Tag() == TYPE_VECTOR )
|
||||
return (IsIntegral(el[0]->Type()->YieldType()->Tag()) ||
|
||||
IsBool(el[0]->Type()->YieldType()->Tag())) ?
|
||||
return (IsIntegral(el[0]->Type()->Yield()->Tag()) ||
|
||||
IsBool(el[0]->Type()->Yield()->Tag())) ?
|
||||
MATCHES_INDEX_VECTOR : DOES_NOT_MATCH_INDEX;
|
||||
else
|
||||
return (IsIntegral(el[0]->Type()->Tag()) ||
|
||||
|
@ -1528,8 +1487,8 @@ bool same_type(const BroType* t1, const BroType* t2, bool is_init, bool match_re
|
|||
return false;
|
||||
}
|
||||
|
||||
const BroType* y1 = t1->YieldType();
|
||||
const BroType* y2 = t2->YieldType();
|
||||
const BroType* y1 = t1->Yield().get();
|
||||
const BroType* y2 = t2->Yield().get();
|
||||
|
||||
if ( y1 || y2 )
|
||||
{
|
||||
|
@ -1548,10 +1507,10 @@ bool same_type(const BroType* t1, const BroType* t2, bool is_init, bool match_re
|
|||
if ( ft1->Flavor() != ft2->Flavor() )
|
||||
return false;
|
||||
|
||||
if ( t1->YieldType() || t2->YieldType() )
|
||||
if ( t1->Yield() || t2->Yield() )
|
||||
{
|
||||
if ( ! t1->YieldType() || ! t2->YieldType() ||
|
||||
! same_type(t1->YieldType(), t2->YieldType(), is_init, match_record_field_names) )
|
||||
if ( ! t1->Yield() || ! t2->Yield() ||
|
||||
! same_type(t1->Yield().get(), t2->Yield().get(), is_init, match_record_field_names) )
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -1596,7 +1555,7 @@ bool same_type(const BroType* t1, const BroType* t2, bool is_init, bool match_re
|
|||
|
||||
case TYPE_VECTOR:
|
||||
case TYPE_FILE:
|
||||
return same_type(t1->YieldType(), t2->YieldType(), is_init, match_record_field_names);
|
||||
return same_type(t1->Yield().get(), t2->Yield().get(), is_init, match_record_field_names);
|
||||
|
||||
case TYPE_OPAQUE:
|
||||
{
|
||||
|
@ -1848,8 +1807,8 @@ IntrusivePtr<BroType> merge_types(const BroType* t1, const BroType* t2)
|
|||
tl3->Append(std::move(tl3_i));
|
||||
}
|
||||
|
||||
const BroType* y1 = t1->YieldType();
|
||||
const BroType* y2 = t2->YieldType();
|
||||
const BroType* y1 = t1->Yield().get();
|
||||
const BroType* y2 = t2->Yield().get();
|
||||
IntrusivePtr<BroType> y3;
|
||||
|
||||
if ( y1 || y2 )
|
||||
|
@ -1882,8 +1841,8 @@ IntrusivePtr<BroType> merge_types(const BroType* t1, const BroType* t2)
|
|||
const FuncType* ft1 = (const FuncType*) t1;
|
||||
const FuncType* ft2 = (const FuncType*) t1;
|
||||
auto args = cast_intrusive<RecordType>(merge_types(ft1->Args(), ft2->Args()));
|
||||
auto yield = t1->YieldType() ?
|
||||
merge_types(t1->YieldType(), t2->YieldType()) : nullptr;
|
||||
auto yield = t1->Yield() ?
|
||||
merge_types(t1->Yield().get(), t2->Yield().get()) : nullptr;
|
||||
|
||||
return make_intrusive<FuncType>(std::move(args), std::move(yield),
|
||||
ft1->Flavor());
|
||||
|
@ -1967,22 +1926,22 @@ IntrusivePtr<BroType> merge_types(const BroType* t1, const BroType* t2)
|
|||
}
|
||||
|
||||
case TYPE_VECTOR:
|
||||
if ( ! same_type(t1->YieldType(), t2->YieldType()) )
|
||||
if ( ! same_type(t1->Yield().get(), t2->Yield().get()) )
|
||||
{
|
||||
t1->Error("incompatible types", t2);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return make_intrusive<VectorType>(merge_types(t1->YieldType(), t2->YieldType()));
|
||||
return make_intrusive<VectorType>(merge_types(t1->Yield().get(), t2->Yield().get()));
|
||||
|
||||
case TYPE_FILE:
|
||||
if ( ! same_type(t1->YieldType(), t2->YieldType()) )
|
||||
if ( ! same_type(t1->Yield().get(), t2->Yield().get()) )
|
||||
{
|
||||
t1->Error("incompatible types", t2);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return make_intrusive<FileType>(merge_types(t1->YieldType(), t2->YieldType()));
|
||||
return make_intrusive<FileType>(merge_types(t1->Yield().get(), t2->Yield().get()));
|
||||
|
||||
case TYPE_UNION:
|
||||
reporter->InternalError("union type in merge_types()");
|
||||
|
|
30
src/Type.h
30
src/Type.h
|
@ -171,9 +171,14 @@ public:
|
|||
// Returns the type yielded by this type. For example, if
|
||||
// this type is a table[string] of port, then returns the "port"
|
||||
// type. Returns nil if this is not an index type.
|
||||
virtual BroType* YieldType();
|
||||
virtual const IntrusivePtr<BroType>& Yield() const;
|
||||
|
||||
[[deprecated("Remove in v4.1. Use Yield() instead.")]]
|
||||
virtual BroType* YieldType()
|
||||
{ return Yield().get(); }
|
||||
[[deprecated("Remove in v4.1. Use Yield() instead.")]]
|
||||
virtual const BroType* YieldType() const
|
||||
{ return ((BroType*) this)->YieldType(); }
|
||||
{ return Yield().get(); }
|
||||
|
||||
// Returns true if this type is a record and contains the
|
||||
// given field, false otherwise.
|
||||
|
@ -307,12 +312,12 @@ public:
|
|||
|
||||
bool IsSet() const
|
||||
{
|
||||
return tag == TYPE_TABLE && (YieldType() == nullptr);
|
||||
return tag == TYPE_TABLE && ! Yield();
|
||||
}
|
||||
|
||||
bool IsTable() const
|
||||
{
|
||||
return tag == TYPE_TABLE && (YieldType() != nullptr);
|
||||
return tag == TYPE_TABLE && Yield();
|
||||
}
|
||||
|
||||
BroType* Ref() { ::Ref(this); return this; }
|
||||
|
@ -398,8 +403,8 @@ public:
|
|||
const std::vector<IntrusivePtr<BroType>>& IndexTypes() const
|
||||
{ return indices->Types(); }
|
||||
|
||||
BroType* YieldType() override;
|
||||
const BroType* YieldType() const override;
|
||||
const IntrusivePtr<BroType>& Yield() const override
|
||||
{ return yield_type; }
|
||||
|
||||
void Describe(ODesc* d) const override;
|
||||
void DescribeReST(ODesc* d, bool roles_only = false) const override;
|
||||
|
@ -469,8 +474,10 @@ public:
|
|||
~FuncType() override;
|
||||
|
||||
RecordType* Args() const { return args.get(); }
|
||||
BroType* YieldType() override;
|
||||
const BroType* YieldType() const override;
|
||||
|
||||
const IntrusivePtr<BroType>& Yield() const override
|
||||
{ return yield; }
|
||||
|
||||
void SetYieldType(IntrusivePtr<BroType> arg_yield) { yield = std::move(arg_yield); }
|
||||
function_flavor Flavor() const { return flavor; }
|
||||
std::string FlavorString() const;
|
||||
|
@ -646,7 +653,8 @@ public:
|
|||
IntrusivePtr<BroType> ShallowClone() override { return make_intrusive<FileType>(yield); }
|
||||
~FileType() override;
|
||||
|
||||
BroType* YieldType() override;
|
||||
const IntrusivePtr<BroType>& Yield() const override
|
||||
{ return yield; }
|
||||
|
||||
void Describe(ODesc* d) const override;
|
||||
|
||||
|
@ -729,8 +737,8 @@ public:
|
|||
explicit VectorType(IntrusivePtr<BroType> t);
|
||||
IntrusivePtr<BroType> ShallowClone() override;
|
||||
~VectorType() override;
|
||||
BroType* YieldType() override;
|
||||
const BroType* YieldType() const override;
|
||||
|
||||
const IntrusivePtr<BroType>& Yield() const override;
|
||||
|
||||
int MatchesIndex(ListExpr* index) const override;
|
||||
|
||||
|
|
22
src/Val.cc
22
src/Val.cc
|
@ -1348,7 +1348,7 @@ static void find_nested_record_types(BroType* t, std::set<RecordType*>* found)
|
|||
return;
|
||||
case TYPE_TABLE:
|
||||
find_nested_record_types(t->AsTableType()->Indices(), found);
|
||||
find_nested_record_types(t->AsTableType()->YieldType(), found);
|
||||
find_nested_record_types(t->AsTableType()->Yield().get(), found);
|
||||
return;
|
||||
case TYPE_LIST:
|
||||
{
|
||||
|
@ -1358,10 +1358,10 @@ static void find_nested_record_types(BroType* t, std::set<RecordType*>* found)
|
|||
return;
|
||||
case TYPE_FUNC:
|
||||
find_nested_record_types(t->AsFuncType()->Args(), found);
|
||||
find_nested_record_types(t->AsFuncType()->YieldType(), found);
|
||||
find_nested_record_types(t->AsFuncType()->Yield().get(), found);
|
||||
return;
|
||||
case TYPE_VECTOR:
|
||||
find_nested_record_types(t->AsVectorType()->YieldType(), found);
|
||||
find_nested_record_types(t->AsVectorType()->Yield().get(), found);
|
||||
return;
|
||||
case TYPE_TYPE:
|
||||
find_nested_record_types(t->AsTypeType()->Type(), found);
|
||||
|
@ -1439,7 +1439,7 @@ int TableVal::RecursiveSize() const
|
|||
int n = AsTable()->Length();
|
||||
|
||||
if ( Type()->IsSet() ||
|
||||
const_cast<TableType*>(Type()->AsTableType())->YieldType()->Tag()
|
||||
const_cast<TableType*>(Type()->AsTableType())->Yield()->Tag()
|
||||
!= TYPE_TABLE )
|
||||
return n;
|
||||
|
||||
|
@ -1809,11 +1809,11 @@ IntrusivePtr<Val> TableVal::Default(Val* index)
|
|||
|
||||
if ( ! def_val )
|
||||
{
|
||||
BroType* ytype = Type()->YieldType();
|
||||
const auto& ytype = Type()->Yield();
|
||||
BroType* dtype = def_attr->AttrExpr()->Type();
|
||||
|
||||
if ( dtype->Tag() == TYPE_RECORD && ytype->Tag() == TYPE_RECORD &&
|
||||
! same_type(dtype, ytype) &&
|
||||
! same_type(dtype, ytype.get()) &&
|
||||
record_promotion_compatible(dtype->AsRecordType(),
|
||||
ytype->AsRecordType()) )
|
||||
{
|
||||
|
@ -1834,7 +1834,7 @@ IntrusivePtr<Val> TableVal::Default(Val* index)
|
|||
}
|
||||
|
||||
if ( def_val->Type()->Tag() != TYPE_FUNC ||
|
||||
same_type(def_val->Type(), Type()->YieldType()) )
|
||||
same_type(def_val->Type(), Type()->Yield().get()) )
|
||||
{
|
||||
if ( def_attr->AttrExpr()->IsConst() )
|
||||
return def_val;
|
||||
|
@ -2305,11 +2305,11 @@ void TableVal::InitDefaultFunc(Frame* f)
|
|||
if ( ! def_attr )
|
||||
return;
|
||||
|
||||
BroType* ytype = Type()->YieldType();
|
||||
const auto& ytype = Type()->Yield();
|
||||
BroType* dtype = def_attr->AttrExpr()->Type();
|
||||
|
||||
if ( dtype->Tag() == TYPE_RECORD && ytype->Tag() == TYPE_RECORD &&
|
||||
! same_type(dtype, ytype) &&
|
||||
! same_type(dtype, ytype.get()) &&
|
||||
record_promotion_compatible(dtype->AsRecordType(),
|
||||
ytype->AsRecordType()) )
|
||||
return; // TableVal::Default will handle this.
|
||||
|
@ -3001,7 +3001,7 @@ IntrusivePtr<Val> VectorVal::SizeVal() const
|
|||
bool VectorVal::Assign(unsigned int index, IntrusivePtr<Val> element)
|
||||
{
|
||||
if ( element &&
|
||||
! same_type(element->Type(), vector_type->YieldType(), false) )
|
||||
! same_type(element->Type(), vector_type->Yield().get(), false) )
|
||||
return false;
|
||||
|
||||
Val* val_at_index = nullptr;
|
||||
|
@ -3042,7 +3042,7 @@ bool VectorVal::AssignRepeat(unsigned int index, unsigned int how_many,
|
|||
bool VectorVal::Insert(unsigned int index, Val* element)
|
||||
{
|
||||
if ( element &&
|
||||
! same_type(element->Type(), vector_type->YieldType(), false) )
|
||||
! same_type(element->Type(), vector_type->Yield().get(), false) )
|
||||
{
|
||||
Unref(element);
|
||||
return false;
|
||||
|
|
|
@ -459,7 +459,7 @@ void begin_func(ID* id, const char* module_name, function_flavor flavor,
|
|||
{
|
||||
if ( flavor == FUNC_FLAVOR_EVENT )
|
||||
{
|
||||
const BroType* yt = t->YieldType();
|
||||
const auto& yt = t->Yield();
|
||||
|
||||
if ( yt && yt->Tag() != TYPE_VOID )
|
||||
id->Error("event cannot yield a value", t.get());
|
||||
|
|
|
@ -314,7 +314,7 @@ struct val_converter {
|
|||
}
|
||||
|
||||
auto value_val = bro_broker::data_to_val(move(item.second),
|
||||
tt->YieldType());
|
||||
tt->Yield().get());
|
||||
|
||||
if ( ! value_val )
|
||||
return nullptr;
|
||||
|
@ -334,7 +334,7 @@ struct val_converter {
|
|||
|
||||
for ( auto& item : a )
|
||||
{
|
||||
auto item_val = bro_broker::data_to_val(move(item), vt->YieldType());
|
||||
auto item_val = bro_broker::data_to_val(move(item), vt->Yield().get());
|
||||
|
||||
if ( ! item_val )
|
||||
return nullptr;
|
||||
|
@ -667,7 +667,7 @@ struct type_checker {
|
|||
return false;
|
||||
}
|
||||
|
||||
if ( ! data_type_check(item.second, tt->YieldType()) )
|
||||
if ( ! data_type_check(item.second, tt->Yield().get()) )
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -682,7 +682,7 @@ struct type_checker {
|
|||
|
||||
for ( auto& item : a )
|
||||
{
|
||||
if ( ! data_type_check(item, vt->YieldType()) )
|
||||
if ( ! data_type_check(item, vt->Yield().get()) )
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -522,13 +522,13 @@ bool Manager::CreateTableStream(RecordVal* fval)
|
|||
|
||||
if ( val )
|
||||
{
|
||||
const BroType* table_yield = dst->Type()->AsTableType()->YieldType();
|
||||
const auto& table_yield = dst->Type()->AsTableType()->Yield();
|
||||
const BroType* compare_type = val.get();
|
||||
|
||||
if ( want_record->InternalInt() == 0 )
|
||||
compare_type = val->GetFieldType(0).get();
|
||||
|
||||
if ( ! same_type(table_yield, compare_type) )
|
||||
if ( ! same_type(table_yield.get(), compare_type) )
|
||||
{
|
||||
ODesc desc1;
|
||||
ODesc desc2;
|
||||
|
@ -821,7 +821,7 @@ bool Manager::IsCompatibleType(BroType* t, bool atomic_only)
|
|||
if ( atomic_only )
|
||||
return false;
|
||||
|
||||
return IsCompatibleType(t->AsVectorType()->YieldType(), true);
|
||||
return IsCompatibleType(t->AsVectorType()->Yield().get(), true);
|
||||
}
|
||||
|
||||
default:
|
||||
|
@ -945,7 +945,7 @@ bool Manager::UnrollRecordType(vector<Field*> *fields, const RecordType *rec,
|
|||
st = rec->GetFieldType(i)->AsSetType()->Indices()->GetPureType()->Tag();
|
||||
|
||||
else if ( ty == TYPE_VECTOR )
|
||||
st = rec->GetFieldType(i)->AsVectorType()->YieldType()->Tag();
|
||||
st = rec->GetFieldType(i)->AsVectorType()->Yield()->Tag();
|
||||
|
||||
else if ( ty == TYPE_PORT &&
|
||||
rec->FieldDecl(i)->FindAttr(ATTR_TYPE_COLUMN) )
|
||||
|
@ -2354,16 +2354,14 @@ Val* Manager::ValueToVal(const Stream* i, const Value* val, BroType* request_typ
|
|||
case TYPE_VECTOR:
|
||||
{
|
||||
// all entries have to have the same type...
|
||||
BroType* type = request_type->AsVectorType()->YieldType();
|
||||
VectorType* vt = new VectorType({NewRef{}, type});
|
||||
VectorVal* v = new VectorVal(vt);
|
||||
for ( int j = 0; j < val->val.vector_val.size; j++ )
|
||||
{
|
||||
v->Assign(j, ValueToVal(i, val->val.vector_val.vals[j], type, have_error));
|
||||
}
|
||||
const auto& type = request_type->AsVectorType()->Yield();
|
||||
auto vt = make_intrusive<VectorType>(type);
|
||||
auto v = make_intrusive<VectorVal>(vt.get());
|
||||
|
||||
Unref(vt);
|
||||
return v;
|
||||
for ( int j = 0; j < val->val.vector_val.size; j++ )
|
||||
v->Assign(j, ValueToVal(i, val->val.vector_val.vals[j], type.get(), have_error));
|
||||
|
||||
return v.release();
|
||||
}
|
||||
|
||||
case TYPE_ENUM: {
|
||||
|
|
|
@ -47,7 +47,7 @@ Config::Config(ReaderFrontend *frontend) : ReaderBackend(frontend)
|
|||
if ( primary == TYPE_TABLE )
|
||||
secondary = id->Type()->AsSetType()->Indices()->GetPureType()->Tag();
|
||||
else if ( primary == TYPE_VECTOR )
|
||||
secondary = id->Type()->AsVectorType()->YieldType()->Tag();
|
||||
secondary = id->Type()->AsVectorType()->Yield()->Tag();
|
||||
|
||||
option_types[id->Name()] = std::make_tuple(primary, secondary);
|
||||
}
|
||||
|
|
|
@ -401,7 +401,7 @@ bool Manager::TraverseRecord(Stream* stream, Filter* filter, RecordType* rt,
|
|||
if ( j < num_ext_fields )
|
||||
{
|
||||
i = j;
|
||||
rtype = filter->ext_func->FType()->YieldType()->AsRecordType();
|
||||
rtype = filter->ext_func->FType()->Yield()->AsRecordType();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -520,7 +520,7 @@ bool Manager::TraverseRecord(Stream* stream, Filter* filter, RecordType* rt,
|
|||
st = t->AsSetType()->Indices()->GetPureType()->Tag();
|
||||
|
||||
else if ( t->Tag() == TYPE_VECTOR )
|
||||
st = t->AsVectorType()->YieldType()->Tag();
|
||||
st = t->AsVectorType()->Yield()->Tag();
|
||||
|
||||
bool optional = rtype->FieldDecl(i)->FindAttr(ATTR_OPTIONAL);
|
||||
|
||||
|
@ -587,18 +587,18 @@ bool Manager::AddFilter(EnumVal* id, RecordVal* fval)
|
|||
filter->num_ext_fields = 0;
|
||||
if ( filter->ext_func )
|
||||
{
|
||||
if ( filter->ext_func->FType()->YieldType()->Tag() == TYPE_RECORD )
|
||||
if ( filter->ext_func->FType()->Yield()->Tag() == TYPE_RECORD )
|
||||
{
|
||||
filter->num_ext_fields = filter->ext_func->FType()->YieldType()->AsRecordType()->NumFields();
|
||||
filter->num_ext_fields = filter->ext_func->FType()->Yield()->AsRecordType()->NumFields();
|
||||
}
|
||||
else if ( filter->ext_func->FType()->YieldType()->Tag() == TYPE_VOID )
|
||||
else if ( filter->ext_func->FType()->Yield()->Tag() == TYPE_VOID )
|
||||
{
|
||||
// This is a special marker for the default no-implementation
|
||||
// of the ext_func and we'll allow it to slide.
|
||||
}
|
||||
else
|
||||
{
|
||||
reporter->Error("Return value of log_ext is not a record (got %s)", type_name(filter->ext_func->FType()->YieldType()->Tag()));
|
||||
reporter->Error("Return value of log_ext is not a record (got %s)", type_name(filter->ext_func->FType()->Yield()->Tag()));
|
||||
delete filter;
|
||||
return false;
|
||||
}
|
||||
|
@ -1038,7 +1038,7 @@ threading::Value* Manager::ValToLogVal(Val* val, BroType* ty)
|
|||
{
|
||||
lval->val.vector_val.vals[i] =
|
||||
ValToLogVal(vec->Lookup(i),
|
||||
vec->Type()->YieldType());
|
||||
vec->Type()->Yield().get());
|
||||
}
|
||||
|
||||
break;
|
||||
|
|
|
@ -199,10 +199,10 @@ function Option::set_change_handler%(ID: string, on_change: any, priority: int &
|
|||
return val_mgr->False();
|
||||
}
|
||||
|
||||
if ( ! same_type(on_change->Type()->AsFuncType()->YieldType(), i->Type()) )
|
||||
if ( ! same_type(on_change->Type()->AsFuncType()->Yield().get(), i->Type()) )
|
||||
{
|
||||
builtin_error(fmt("Passed function needs to return type '%s' for ID '%s'; got '%s'",
|
||||
type_name(i->Type()->Tag()), ID->CheckString(), type_name(on_change->Type()->AsFuncType()->YieldType()->Tag())));
|
||||
type_name(i->Type()->Tag()), ID->CheckString(), type_name(on_change->Type()->AsFuncType()->Yield()->Tag())));
|
||||
return val_mgr->False();
|
||||
}
|
||||
|
||||
|
|
|
@ -154,7 +154,7 @@ bool Value::IsCompatibleType(BroType* t, bool atomic_only)
|
|||
if ( atomic_only )
|
||||
return false;
|
||||
|
||||
return IsCompatibleType(t->AsVectorType()->YieldType(), true);
|
||||
return IsCompatibleType(t->AsVectorType()->Yield().get(), true);
|
||||
}
|
||||
|
||||
default:
|
||||
|
|
14
src/zeek.bif
14
src/zeek.bif
|
@ -804,7 +804,7 @@ function sha256_hash_finish%(handle: opaque of sha256%): string
|
|||
function paraglob_init%(v: any%) : opaque of paraglob
|
||||
%{
|
||||
if ( v->Type()->Tag() != TYPE_VECTOR ||
|
||||
v->Type()->YieldType()->Tag() != TYPE_STRING )
|
||||
v->Type()->Yield()->Tag() != TYPE_STRING )
|
||||
{
|
||||
// reporter->Error will throw an exception.
|
||||
reporter->Error("paraglob requires a vector of strings for initialization.");
|
||||
|
@ -1281,7 +1281,7 @@ function resize%(aggr: any, newsize: count%) : count
|
|||
function any_set%(v: any%) : bool
|
||||
%{
|
||||
if ( v->Type()->Tag() != TYPE_VECTOR ||
|
||||
v->Type()->YieldType()->Tag() != TYPE_BOOL )
|
||||
v->Type()->Yield()->Tag() != TYPE_BOOL )
|
||||
{
|
||||
builtin_error("any_set() requires vector of bool");
|
||||
return val_mgr->False();
|
||||
|
@ -1310,7 +1310,7 @@ function any_set%(v: any%) : bool
|
|||
function all_set%(v: any%) : bool
|
||||
%{
|
||||
if ( v->Type()->Tag() != TYPE_VECTOR ||
|
||||
v->Type()->YieldType()->Tag() != TYPE_BOOL )
|
||||
v->Type()->Yield()->Tag() != TYPE_BOOL )
|
||||
{
|
||||
builtin_error("all_set() requires vector of bool");
|
||||
return val_mgr->False();
|
||||
|
@ -1408,7 +1408,7 @@ function sort%(v: any, ...%) : any
|
|||
return rval;
|
||||
}
|
||||
|
||||
BroType* elt_type = v->Type()->YieldType();
|
||||
const auto& elt_type = v->Type()->Yield();
|
||||
Func* comp = 0;
|
||||
|
||||
if ( @ARG@.size() > 2 )
|
||||
|
@ -1434,7 +1434,7 @@ function sort%(v: any, ...%) : any
|
|||
if ( comp )
|
||||
{
|
||||
FuncType* comp_type = comp->FType()->AsFuncType();
|
||||
if ( comp_type->YieldType()->Tag() != TYPE_INT ||
|
||||
if ( comp_type->Yield()->Tag() != TYPE_INT ||
|
||||
! comp_type->ArgTypes()->AllMatch(elt_type, 0) )
|
||||
{
|
||||
builtin_error("invalid comparison function in call to sort()");
|
||||
|
@ -1478,7 +1478,7 @@ function order%(v: any, ...%) : index_vec
|
|||
return result_v;
|
||||
}
|
||||
|
||||
BroType* elt_type = v->Type()->YieldType();
|
||||
const auto& elt_type = v->Type()->Yield();
|
||||
Func* comp = 0;
|
||||
|
||||
if ( @ARG@.size() > 2 )
|
||||
|
@ -1516,7 +1516,7 @@ function order%(v: any, ...%) : index_vec
|
|||
if ( comp )
|
||||
{
|
||||
FuncType* comp_type = comp->FType()->AsFuncType();
|
||||
if ( comp_type->YieldType()->Tag() != TYPE_INT ||
|
||||
if ( comp_type->Yield()->Tag() != TYPE_INT ||
|
||||
! comp_type->ArgTypes()->AllMatch(elt_type, 0) )
|
||||
{
|
||||
builtin_error("invalid comparison function in call to order()");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue