diff --git a/src/las.c b/src/las.c index becda1eae7126dbcb4d37365d942ee07eeaa3911..f33fbd40ddcbc440ff29de82879265ab1a013f22 100644 --- a/src/las.c +++ b/src/las.c @@ -3054,9 +3054,16 @@ static struct pike_string *get_name_of_function(node *n) if(SUBTYPEOF(n->u.sval) == FUNCTION_BUILTIN) { name = n->u.sval.u.efun->name; - }else{ - name = - ID_FROM_INT(n->u.sval.u.object->prog, SUBTYPEOF(n->u.sval))->name; + } else { + struct program *p = n->u.sval.u.object->prog; + if (!p) { + p = id_to_program(n->u.sval.u.object->program_id); + } + if (p) { + name = ID_FROM_INT(p, SUBTYPEOF(n->u.sval))->name; + } else { + MAKE_CONST_STRING(name, "function in destructed object"); + } } break; diff --git a/src/program.c b/src/program.c index 470d57bb926b203fdbffc49b643714335e6a6d8e..992b7105f2bc516333a891ddedd968a23188e4c0 100644 --- a/src/program.c +++ b/src/program.c @@ -9100,6 +9100,7 @@ static int run_pass1(struct compilation *c) }else{ free_program(c->placeholder->prog); add_ref(c->placeholder->prog=Pike_compiler->new_program); + c->placeholder->program_id = Pike_compiler->new_program->id; debug_malloc_touch(c->placeholder); } }