Skip to content

Commit bcf2be8

Browse files
committed
feat: allow specifying VM execution flags
1 parent e9903ff commit bcf2be8

File tree

2 files changed

+11
-12
lines changed

2 files changed

+11
-12
lines changed

include/zenkit-capi/DaedalusVm.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ typedef struct ZkInternal_DaedalusVm ZkDaedalusVm;
1010
typedef void (*ZkDaedalusVmExternalCallback)(void* ctx, ZkDaedalusVm* vm);
1111
typedef void (*ZkDaedalusVmExternalDefaultCallback)(void* ctx, ZkDaedalusVm* vm, ZkDaedalusSymbol* sym);
1212

13-
ZKC_API ZkDaedalusVm* ZkDaedalusVm_load(ZkRead* buf);
14-
ZKC_API ZkDaedalusVm* ZkDaedalusVm_loadPath(ZkString path);
15-
ZKC_API ZkDaedalusVm* ZkDaedalusVm_loadVfs(ZkVfs* vfs, ZkString name);
13+
ZKC_API ZkDaedalusVm* ZkDaedalusVm_load(ZkRead* buf, uint8_t flags);
14+
ZKC_API ZkDaedalusVm* ZkDaedalusVm_loadPath(ZkString path, uint8_t flags);
15+
ZKC_API ZkDaedalusVm* ZkDaedalusVm_loadVfs(ZkVfs* vfs, ZkString name, uint8_t flags);
1616
ZKC_API void ZkDaedalusVm_del(ZkDaedalusVm* slf);
1717

1818
ZKC_API void ZkDaedalusVm_pushInt(ZkDaedalusVm* slf, int32_t value);
@@ -47,5 +47,7 @@ ZKC_API void
4747
ZkDaedalusVm_registerExternal(ZkDaedalusVm* slf, ZkDaedalusSymbol* sym, ZkDaedalusVmExternalCallback cb, void* ctx);
4848
ZKC_API void
4949
ZkDaedalusVm_overrideFunction(ZkDaedalusVm* slf, char const* name, ZkDaedalusVmExternalCallback cb, void* ctx);
50+
ZKC_API void
51+
ZkDaedalusVm_overrideFunctionNaked(ZkDaedalusVm* slf, char const* name, ZkDaedalusVmExternalCallback cb, void* ctx);
5052
ZKC_API void ZkDaedalusVm_registerExternalDefault(ZkDaedalusVm* slf, ZkDaedalusVmExternalDefaultCallback cb, void* ctx);
5153
ZKC_API void ZkDaedalusVm_printStackTrace(ZkDaedalusVm* slf);

src/DaedalusVm.cc

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ struct ZkInternal_DaedalusVm {
1414
std::string string_scope_workaround_cache {};
1515
};
1616

17-
ZkDaedalusVm* ZkDaedalusVm_load(ZkRead* buf) {
17+
ZkDaedalusVm* ZkDaedalusVm_load(ZkRead* buf, uint8_t flags) {
1818
ZKC_TRACE_FN();
1919
ZKC_CHECK_NULL(buf);
2020

@@ -23,10 +23,7 @@ ZkDaedalusVm* ZkDaedalusVm_load(ZkRead* buf) {
2323
script.load(buf);
2424
zenkit::register_all_script_classes(script);
2525

26-
auto* vm = new ZkDaedalusVm {
27-
zenkit::DaedalusVm {std::move(script), zenkit::DaedalusVmExecutionFlag::ALLOW_NULL_INSTANCE_ACCESS},
28-
{},
29-
nullptr};
26+
auto* vm = new ZkDaedalusVm {zenkit::DaedalusVm {std::move(script), flags}, {}, nullptr};
3027
vm->handle.register_exception_handler(zenkit::lenient_vm_exception_handler);
3128

3229
vm->handle.register_default_external_custom([vm](zenkit::DaedalusVm& v, zenkit::DaedalusSymbol& sym) {
@@ -70,28 +67,28 @@ ZkDaedalusVm* ZkDaedalusVm_load(ZkRead* buf) {
7067
}
7168
}
7269

73-
ZkDaedalusVm* ZkDaedalusVm_loadPath(ZkString path) {
70+
ZkDaedalusVm* ZkDaedalusVm_loadPath(ZkString path, uint8_t flags) {
7471
ZKC_TRACE_FN();
7572
ZKC_CHECK_NULL(path);
7673

7774
try {
7875
auto buf = zenkit::Read::from(path);
79-
return ZkDaedalusVm_load(buf.get());
76+
return ZkDaedalusVm_load(buf.get(), flags);
8077
} catch (std::exception const& exc) {
8178
ZKC_LOG_ERROR("ZkDaedalusVm_load() failed: %s", exc.what());
8279
return nullptr;
8380
}
8481
}
8582

86-
ZkDaedalusVm* ZkDaedalusVm_loadVfs(ZkVfs* vfs, ZkString name) {
83+
ZkDaedalusVm* ZkDaedalusVm_loadVfs(ZkVfs* vfs, ZkString name, uint8_t flags) {
8784
ZKC_TRACE_FN();
8885
ZKC_CHECK_NULL(vfs, name);
8986

9087
auto node = vfs->find(name);
9188
if (node == nullptr) return nullptr;
9289

9390
auto rd = node->open_read();
94-
return ZkDaedalusVm_load(rd.get());
91+
return ZkDaedalusVm_load(rd.get(), flags);
9592
}
9693

9794
ZKC_DELETER(ZkDaedalusVm)

0 commit comments

Comments
 (0)