From 9e82dc0d2ff4c1bd08b65191a9d06711eaf3a132 Mon Sep 17 00:00:00 2001 From: Daniel Kolesa Date: Mon, 29 Mar 2021 23:42:08 +0200 Subject: [PATCH] get rid of cycle check from push_arg --- src/cs_ident.cc | 6 ------ src/cs_val.cc | 10 ++++++++-- 2 files changed, 8 insertions(+), 8 deletions(-) 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; }