diff --git a/src/cs_ident.cc b/src/cs_ident.cc index 84aa86f..df36e55 100644 --- a/src/cs_ident.cc +++ b/src/cs_ident.cc @@ -144,10 +144,14 @@ void alias_stack::set_arg(alias *a, thread_state &ts, any_value &v) { node->val_s = std::move(v); } -void alias_stack::set_alias(alias *, thread_state &ts, any_value &v) { +void alias_stack::set_alias(alias *a, thread_state &ts, any_value &v) { node->val_s = std::move(v); node->code = bcode_ref{}; flags = ts.ident_flags; + auto *imp = static_cast(a); + if (node == &imp->p_initial) { + imp->p_flags = flags; + } } /* public interface */ diff --git a/src/cs_state.cc b/src/cs_state.cc index 5a08b1b..6ae2f0e 100644 --- a/src/cs_state.cc +++ b/src/cs_state.cc @@ -279,7 +279,9 @@ LIBCUBESCRIPT_EXPORT void state::destroy() { state::state(internal_state *s) { p_tstate = s->create(s); + p_tstate->pstate = this; p_tstate->istate = s; + p_tstate->owner = false; } LIBCUBESCRIPT_EXPORT state state::new_thread() {