Skip to content

Commit ec46ba8

Browse files
gumb0axic
authored andcommitted
Simplify instance allocation
1 parent 4018772 commit ec46ba8

1 file changed

Lines changed: 18 additions & 9 deletions

File tree

lib/fizzy/capi.cpp

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,20 @@
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+
1226
extern "C" {
1327
struct 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

103113
void fizzy_free_instance(FizzyInstance* instance)
104114
{
105-
delete instance->instance;
106-
delete instance;
115+
delete unwrap(instance);
107116
}
108117

109118
FizzyExecutionResult 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

Comments
 (0)