Merge remote-tracking branch 'origin/topic/vern/standalone-id-tracking-fix'

* origin/topic/vern/standalone-id-tracking-fix:
  fix for tracking identifiers and aggregates when compiling to standalone-C++
This commit is contained in:
Tim Wojtulewicz 2025-09-16 10:53:04 -07:00
commit aebeae8f8a
5 changed files with 11 additions and 11 deletions

View file

@ -43,16 +43,11 @@ shared_ptr<CPP_InitInfo> CPPCompile::RegisterConstant(const ValPtr& vp, int& con
// render the same.
t->Describe(&d);
// Likewise, tables that have attributes.
if ( t->Tag() == TYPE_TABLE ) {
const auto& attrs = v->AsTableVal()->GetAttrs();
if ( attrs )
attrs->Describe(&d);
else
d.Add("<no-attrs>");
}
c_desc = d.Description();
// Aggregates need to be pointer-unique.
if ( IsAggr(t) )
c_desc += util::fmt("pointer %p", static_cast<void*>(v));
}
auto c = constants.find(c_desc);

View file

@ -196,6 +196,8 @@ TraversalCode ProfileFunc::PreExpr(const Expr* e) {
auto n = e->AsNameExpr();
auto id = n->IdPtr();
TrackID(id);
// Turns out that NameExpr's can be constructed using a
// different Type* than that of the identifier itself,
// so be sure we track the latter too.

View file

@ -107,7 +107,6 @@ public:
const std::vector<ExprPtr>& Exprs() const { return exprs; }
const std::vector<const LambdaExpr*>& Lambdas() const { return lambdas; }
const std::vector<const ConstExpr*>& Constants() const { return constants; }
const IDSet& UnorderedIdentifiers() const { return ids; }
const std::vector<IDPtr>& OrderedIdentifiers() const { return ordered_ids; }
const TypeSet& UnorderedTypes() const { return types; }
const std::vector<const Type*>& OrderedTypes() const { return ordered_types; }