fixes for initializations of "-O gen-C++" script compilations

This commit is contained in:
Vern Paxson 2024-01-10 18:35:09 -08:00 committed by Arne Welzel
parent bae87fb606
commit f7b739a47d
4 changed files with 14 additions and 3 deletions

View file

@ -366,6 +366,15 @@ public:
protected:
IndexType(TypeTag t, TypeListPtr arg_indices, TypePtr 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();
is_subnet_index = types.size() == 1 && types[0]->Tag() == TYPE_SUBNET;
is_pattern_index = types.size() == 1 && types[0]->Tag() == TYPE_PATTERN;

View file

@ -441,7 +441,7 @@ TableTypeInfo::TableTypeInfo(CPPCompile* _c, TypePtr _t) : AbstractTypeInfo(_c,
auto gi = c->RegisterType(tbl->GetIndices());
ASSERT(gi);
indices = gi->Offset();
final_init_cohort = gi->InitCohort();
final_init_cohort = gi->InitCohort() + 1;
yield = tbl->Yield();

View file

@ -22,8 +22,10 @@ public:
CPPTableType() : TableType(nullptr, nullptr){};
void SetIndexAndYield(TypeListPtr ind, TypePtr yield) {
ind = std::move(indices);
indices = std::move(ind);
yield_type = std::move(yield);
SetSpecialIndices();
RegenerateHash();
}
};

View file

@ -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));
for ( auto& elem : elements )
aggr->Assign(std::move(elem), nullptr);
aggr->Assign(elem, nullptr);
return aggr;
}