diff --git a/src/cs_ident.cc b/src/cs_ident.cc index f15347e..0d36480 100644 --- a/src/cs_ident.cc +++ b/src/cs_ident.cc @@ -115,12 +115,6 @@ alias_impl::alias_impl(state &cs, string_ref name, any_value v, int fl): } void alias_impl::push_arg(any_value &v, ident_stack &st, bool um) { - if (p_astack == &st) { - /* prevent cycles and unnecessary code elsewhere */ - p_val = std::move(v); - clean_code(); - return; - } st.val_s = std::move(p_val); st.next = p_astack; p_astack = &st; diff --git a/src/cs_val.cc b/src/cs_val.cc index 386b027..48a655e 100644 --- a/src/cs_val.cc +++ b/src/cs_val.cc @@ -451,8 +451,14 @@ bool stacked_value::push() { if (!p_a) { return false; } - static_cast(p_a)->push_arg(*this, p_stack); - p_pushed = true; + if (!p_pushed) { + static_cast(p_a)->push_arg(*this, p_stack); + p_pushed = true; + } else { + static_cast(p_a)->p_val = std::move( + *static_cast(this) + ); + } return true; }