diff --git a/jasmin/core/BUILD b/jasmin/core/BUILD index 3f5ab2d..3f9f655 100644 --- a/jasmin/core/BUILD +++ b/jasmin/core/BUILD @@ -50,6 +50,7 @@ cc_library( visibility = ["//visibility:public"], deps = [ "//jasmin/core/internal:function_forward", + "@nth_cc//nth/debug", "@nth_cc//nth/io/deserialize", "@nth_cc//nth/io/reader", "@nth_cc//nth/io/serialize", diff --git a/jasmin/core/function.h b/jasmin/core/function.h index de632bd..10fe10b 100644 --- a/jasmin/core/function.h +++ b/jasmin/core/function.h @@ -36,6 +36,7 @@ struct Function : internal::FunctionBase { template S> friend nth::io::serializer_result_type NthSerialize(S &s, Function const *f) { + if (not f) { NTH_UNIMPLEMENTED(); } return nth::io::serialize(s, s.context(nth::type).get(f)); } @@ -54,7 +55,8 @@ struct Function : internal::FunctionBase { if (not result) { return result; } auto ®istry = d.context(nth::type); fn = registry[id]; - return result_type(true); + if (fn == nullptr) { NTH_UNIMPLEMENTED(); } + return result_type(fn != nullptr); } protected: diff --git a/jasmin/core/function_registry.cc b/jasmin/core/function_registry.cc index e303555..703b446 100644 --- a/jasmin/core/function_registry.cc +++ b/jasmin/core/function_registry.cc @@ -20,7 +20,6 @@ FunctionIdentifier FunctionRegistry::get(Function<> const *f) { Function<> const *FunctionRegistry::operator[](FunctionIdentifier id) const { if (id.index_ >= registered_functions_.size()) { return nullptr; } auto [f, pf] = registered_functions_.from_index(id.index_); - if (pf != id.fragment_) { return nullptr; } return f; } diff --git a/jasmin/core/program_fragment.h b/jasmin/core/program_fragment.h index a7edb39..716bc6e 100644 --- a/jasmin/core/program_fragment.h +++ b/jasmin/core/program_fragment.h @@ -117,8 +117,7 @@ struct ProgramFragment : internal::ProgramFragmentBase { } auto [iter, inserted] = p.functions_.try_emplace(name); - if (not inserted) { return result_type(false); } - registry.register_function(p, iter->second); + if (inserted) { registry.register_function(p, iter->second); } fns.push_back(&iter->second); }