mirror of
https://github.com/zeek/zeek.git
synced 2025-10-05 16:18:19 +00:00
avoid constructing TypeList's on-the-fly for ListVal's with fixed types
This commit is contained in:
parent
1d5bc841e0
commit
6b0d595dae
3 changed files with 16 additions and 3 deletions
|
@ -5029,7 +5029,7 @@ bool ListExpr::IsPure() const
|
||||||
|
|
||||||
ValPtr ListExpr::Eval(Frame* f) const
|
ValPtr ListExpr::Eval(Frame* f) const
|
||||||
{
|
{
|
||||||
auto v = make_intrusive<ListVal>(TYPE_ANY);
|
std::vector<ValPtr> evs;
|
||||||
|
|
||||||
for ( const auto& expr : exprs )
|
for ( const auto& expr : exprs )
|
||||||
{
|
{
|
||||||
|
@ -5041,10 +5041,10 @@ ValPtr ListExpr::Eval(Frame* f) const
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
v->Append(std::move(ev));
|
evs.push_back(std::move(ev));
|
||||||
}
|
}
|
||||||
|
|
||||||
return v;
|
return make_intrusive<ListVal>(cast_intrusive<TypeList>(type), std::move(evs));
|
||||||
}
|
}
|
||||||
|
|
||||||
TypePtr ListExpr::InitType() const
|
TypePtr ListExpr::InitType() const
|
||||||
|
|
|
@ -1563,6 +1563,12 @@ ListVal::ListVal(TypeTag t) : Val(make_intrusive<TypeList>(t == TYPE_ANY ? nullp
|
||||||
tag = t;
|
tag = t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ListVal::ListVal(TypeListPtr tl, std::vector<ValPtr> _vals) : Val(std::move(tl))
|
||||||
|
{
|
||||||
|
tag = TYPE_ANY;
|
||||||
|
vals = std::move(_vals);
|
||||||
|
}
|
||||||
|
|
||||||
ValPtr ListVal::SizeVal() const
|
ValPtr ListVal::SizeVal() const
|
||||||
{
|
{
|
||||||
return val_mgr->Count(vals.size());
|
return val_mgr->Count(vals.size());
|
||||||
|
|
|
@ -661,8 +661,15 @@ private:
|
||||||
class ListVal final : public Val
|
class ListVal final : public Val
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
// Constructor used to build up a homogeneous list of values;
|
||||||
|
// or, if 't' is TYPE_ANY, then a heterogeneous one whose type
|
||||||
|
// is built up as values are appended.
|
||||||
explicit ListVal(TypeTag t);
|
explicit ListVal(TypeTag t);
|
||||||
|
|
||||||
|
// Constructor used to build the list in one shot, with the type
|
||||||
|
// pre-computed.
|
||||||
|
ListVal(TypeListPtr tl, std::vector<ValPtr> vals);
|
||||||
|
|
||||||
~ListVal() override = default;
|
~ListVal() override = default;
|
||||||
|
|
||||||
TypeTag BaseTag() const { return tag; }
|
TypeTag BaseTag() const { return tag; }
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue