mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 22:58:20 +00:00
fixes for initializations of "-O gen-C++" script compilations
This commit is contained in:
parent
bae87fb606
commit
f7b739a47d
4 changed files with 14 additions and 3 deletions
|
@ -366,6 +366,15 @@ public:
|
||||||
protected:
|
protected:
|
||||||
IndexType(TypeTag t, TypeListPtr arg_indices, TypePtr arg_yield_type)
|
IndexType(TypeTag t, TypeListPtr arg_indices, TypePtr arg_yield_type)
|
||||||
: Type(t), indices(std::move(arg_indices)), yield_type(std::move(arg_yield_type)) {
|
: Type(t), indices(std::move(arg_indices)), yield_type(std::move(arg_yield_type)) {
|
||||||
|
// "indices" might be nil if we're deferring construction of the type
|
||||||
|
// for "-O use-C++" initialization.
|
||||||
|
if ( indices )
|
||||||
|
SetSpecialIndices();
|
||||||
|
else
|
||||||
|
is_subnet_index = is_pattern_index = false; // placeholders
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetSpecialIndices() {
|
||||||
const auto& types = indices->GetTypes();
|
const auto& types = indices->GetTypes();
|
||||||
is_subnet_index = types.size() == 1 && types[0]->Tag() == TYPE_SUBNET;
|
is_subnet_index = types.size() == 1 && types[0]->Tag() == TYPE_SUBNET;
|
||||||
is_pattern_index = types.size() == 1 && types[0]->Tag() == TYPE_PATTERN;
|
is_pattern_index = types.size() == 1 && types[0]->Tag() == TYPE_PATTERN;
|
||||||
|
|
|
@ -441,7 +441,7 @@ TableTypeInfo::TableTypeInfo(CPPCompile* _c, TypePtr _t) : AbstractTypeInfo(_c,
|
||||||
auto gi = c->RegisterType(tbl->GetIndices());
|
auto gi = c->RegisterType(tbl->GetIndices());
|
||||||
ASSERT(gi);
|
ASSERT(gi);
|
||||||
indices = gi->Offset();
|
indices = gi->Offset();
|
||||||
final_init_cohort = gi->InitCohort();
|
final_init_cohort = gi->InitCohort() + 1;
|
||||||
|
|
||||||
yield = tbl->Yield();
|
yield = tbl->Yield();
|
||||||
|
|
||||||
|
|
|
@ -22,8 +22,10 @@ public:
|
||||||
CPPTableType() : TableType(nullptr, nullptr){};
|
CPPTableType() : TableType(nullptr, nullptr){};
|
||||||
|
|
||||||
void SetIndexAndYield(TypeListPtr ind, TypePtr yield) {
|
void SetIndexAndYield(TypeListPtr ind, TypePtr yield) {
|
||||||
ind = std::move(indices);
|
indices = std::move(ind);
|
||||||
yield_type = std::move(yield);
|
yield_type = std::move(yield);
|
||||||
|
SetSpecialIndices();
|
||||||
|
RegenerateHash();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -221,7 +221,7 @@ TableValPtr set_constructor__CPP(vector<ValPtr> elements, TableTypePtr t, vector
|
||||||
auto aggr = make_intrusive<TableVal>(std::move(t), std::move(attrs));
|
auto aggr = make_intrusive<TableVal>(std::move(t), std::move(attrs));
|
||||||
|
|
||||||
for ( auto& elem : elements )
|
for ( auto& elem : elements )
|
||||||
aggr->Assign(std::move(elem), nullptr);
|
aggr->Assign(elem, nullptr);
|
||||||
|
|
||||||
return aggr;
|
return aggr;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue