From bcbc0c796a7d191cd4f89e022bf79cdc52d58282 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20B=C3=B6ving?= Date: Thu, 26 Mar 2026 12:38:59 +0000 Subject: [PATCH] fix interpreter 1 fix interpreter add test foo --- src/library/ir_interpreter.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/library/ir_interpreter.cpp b/src/library/ir_interpreter.cpp index 70cdb1453fa8..63a0857e0745 100644 --- a/src/library/ir_interpreter.cpp +++ b/src/library/ir_interpreter.cpp @@ -882,9 +882,6 @@ class interpreter { auto cached_entry = m_constant_cache.find(fn); if (cached_entry != m_constant_cache.end()) { auto cached = cached_entry->second; - if (!cached.m_is_scalar) { - inc(cached.m_val.m_obj); - } return cached.m_val; } auto o_entry = g_init_globals->find(fn); @@ -931,9 +928,6 @@ class interpreter { lean_always_assert(fn_body_tag(decl_fun_body(e.m_decl)) != fn_body_kind::Unreachable); value r = eval_body(decl_fun_body(e.m_decl)); pop_frame(r, decl_type(e.m_decl)); - if (!type_is_scalar(t)) { - inc(r.m_obj); - } m_constant_cache.insert({ fn, constant_cache_entry { type_is_scalar(t), r } }); return r; } @@ -1073,7 +1067,11 @@ class interpreter { unsigned arity = decl_params(e.m_decl).size(); object * r; if (arity == 0) { - r = box_t(load(fn, decl_type(e.m_decl)), decl_type(e.m_decl)); + type t = decl_type(e.m_decl); + r = box_t(load(fn, t), t); + if (!type_is_scalar(t)) { + inc(r); + } } else { // First allocate a closure with zero fixed parameters. This is slightly wasteful in the under-application // case, but simpler to handle.