Bugfix: don't forget to initialize child classes in gsi expressions.

This commit is contained in:
Matthias Koefferlein 2021-04-03 18:24:57 +02:00
parent a863bbd0ba
commit f9762009c6
1 changed files with 6 additions and 5 deletions

View File

@ -1074,21 +1074,22 @@ initialize_expressions ()
gsi::initialize ();
// Go through all classes (maybe again)
for (gsi::ClassBase::class_iterator c = gsi::ClassBase::begin_classes (); c != gsi::ClassBase::end_classes (); ++c) {
std::list<const gsi::ClassBase *> classes = gsi::ClassBase::classes_in_definition_order ();
for (std::list<const gsi::ClassBase *>::const_iterator c = classes.begin (); c != classes.end (); ++c) {
// Skip external classes
if (c->is_external ()) {
if ((*c)->is_external ()) {
continue;
}
// install the method table:
ExpressionMethodTable::initialize_class (&*c);
ExpressionMethodTable::initialize_class (*c);
// register a function that creates a class object (use a function to avoid issues with
// late destruction of global variables which the class object is already gone)
const tl::VariantUserClassBase *cc = c->var_cls_cls ();
const tl::VariantUserClassBase *cc = (*c)->var_cls_cls ();
if (cc) {
tl::Eval::define_global_function (c->name (), new EvalClassFunction (cc));
tl::Eval::define_global_function ((*c)->name (), new EvalClassFunction (cc));
}
}