99#include < fizzy/fizzy.h>
1010#include < memory>
1111
12+ namespace
13+ {
14+ inline FizzyInstance* wrap (fizzy::Instance* instance) noexcept
15+ {
16+ return reinterpret_cast <FizzyInstance*>(instance);
17+ }
18+
19+ inline fizzy::Instance* unwrap (FizzyInstance* instance) noexcept
20+ {
21+ return reinterpret_cast <fizzy::Instance*>(instance);
22+ }
23+
24+ } // namespace
25+
1226extern " C" {
1327struct FizzyModule
1428{
@@ -65,8 +79,7 @@ FizzyInstance* fizzy_instantiate(FizzyModule* module,
6579 auto func = [cfunc = imported_functions[imported_func_idx]](fizzy::Instance& instance,
6680 fizzy::span<const fizzy::Value> args,
6781 int depth) -> fizzy::ExecutionResult {
68- FizzyInstance cinstance{&instance};
69- const auto cres = cfunc.function (cfunc.context , &cinstance,
82+ const auto cres = cfunc.function (cfunc.context , wrap (&instance),
7083 reinterpret_cast <const FizzyValue*>(args.data ()),
7184 static_cast <uint32_t >(args.size ()), depth);
7285
@@ -87,11 +100,8 @@ FizzyInstance* fizzy_instantiate(FizzyModule* module,
87100
88101 auto instance = fizzy::instantiate (std::move (module ->module ), std::move (functions));
89102
90- auto cinstance = std::make_unique<FizzyInstance>();
91- cinstance->instance = instance.release ();
92-
93103 fizzy_free_module (module );
94- return cinstance .release ();
104+ return wrap (instance .release () );
95105 }
96106 catch (...)
97107 {
@@ -102,8 +112,7 @@ FizzyInstance* fizzy_instantiate(FizzyModule* module,
102112
103113void fizzy_free_instance (FizzyInstance* instance)
104114{
105- delete instance->instance ;
106- delete instance;
115+ delete unwrap (instance);
107116}
108117
109118FizzyExecutionResult fizzy_execute (FizzyInstance* instance, uint32_t func_idx,
@@ -112,7 +121,7 @@ FizzyExecutionResult fizzy_execute(FizzyInstance* instance, uint32_t func_idx,
112121 const auto args = reinterpret_cast <const fizzy::Value*>(cargs);
113122
114123 const auto result = fizzy::execute (
115- *instance-> instance , func_idx, fizzy::span<const fizzy::Value>(args, args_size), depth);
124+ *unwrap ( instance) , func_idx, fizzy::span<const fizzy::Value>(args, args_size), depth);
116125
117126 return {result.trapped , result.has_value , fizzy::bit_cast<FizzyValue>(result.value )};
118127}
0 commit comments