Skip to content

Commit 91d106d

Browse files
committed
feat: add access trap support
1 parent bcf2be8 commit 91d106d

4 files changed

Lines changed: 21 additions & 0 deletions

File tree

include/zenkit-capi/DaedalusScript.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,9 @@ ZKC_API ZkBool ZkDaedalusSymbol_getIsMerged(ZkDaedalusSymbol const* slf);
159159
ZKC_API ZkBool ZkDaedalusSymbol_getIsGenerated(ZkDaedalusSymbol const* slf);
160160
ZKC_API ZkBool ZkDaedalusSymbol_getHasReturn(ZkDaedalusSymbol const* slf);
161161

162+
ZKC_API void ZkDaedalusSymbol_setAccessTrapEnabled(ZkDaedalusSymbol* slf, ZkBool trap);
163+
ZKC_API ZkBool ZkDaedalusSymbol_getAccessTrapEnabled(ZkDaedalusSymbol const* slf);
164+
162165
ZKC_API ZkString ZkDaedalusSymbol_getName(ZkDaedalusSymbol const* slf);
163166
ZKC_API int32_t ZkDaedalusSymbol_getAddress(ZkDaedalusSymbol const* slf);
164167
ZKC_API int32_t ZkDaedalusSymbol_getParent(ZkDaedalusSymbol const* slf);

include/zenkit-capi/DaedalusVm.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
typedef struct ZkInternal_DaedalusVm ZkDaedalusVm;
1010
typedef void (*ZkDaedalusVmExternalCallback)(void* ctx, ZkDaedalusVm* vm);
1111
typedef void (*ZkDaedalusVmExternalDefaultCallback)(void* ctx, ZkDaedalusVm* vm, ZkDaedalusSymbol* sym);
12+
typedef void (*ZkDaedalusVmTrapCallback)(void* ctx, ZkDaedalusSymbol const* sym);
1213

1314
ZKC_API ZkDaedalusVm* ZkDaedalusVm_load(ZkRead* buf, uint8_t flags);
1415
ZKC_API ZkDaedalusVm* ZkDaedalusVm_loadPath(ZkString path, uint8_t flags);
@@ -51,3 +52,4 @@ ZKC_API void
5152
ZkDaedalusVm_overrideFunctionNaked(ZkDaedalusVm* slf, char const* name, ZkDaedalusVmExternalCallback cb, void* ctx);
5253
ZKC_API void ZkDaedalusVm_registerExternalDefault(ZkDaedalusVm* slf, ZkDaedalusVmExternalDefaultCallback cb, void* ctx);
5354
ZKC_API void ZkDaedalusVm_printStackTrace(ZkDaedalusVm* slf);
55+
ZKC_API void ZkDaedalusVm_setAccessTrapCallback(ZkDaedalusVm* slf, ZkDaedalusVmTrapCallback cb, void* ctx);

src/DaedalusScript.cc

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,16 @@ ZkBool ZkDaedalusSymbol_getHasReturn(ZkDaedalusSymbol const* slf) {
209209
ZKC_RETURN_CATCH(slf->has_return());
210210
}
211211

212+
void ZkDaedalusSymbol_setAccessTrapEnabled(ZkDaedalusSymbol* slf, ZkBool trap) {
213+
ZKC_CHECK_NULLV(slf);
214+
slf->set_access_trap_enable(trap);
215+
}
216+
217+
ZkBool ZkDaedalusSymbol_getAccessTrapEnabled(ZkDaedalusSymbol const* slf) {
218+
ZKC_CHECK_NULL(slf);
219+
return slf->has_access_trap();
220+
}
221+
212222
ZkString ZkDaedalusSymbol_getName(ZkDaedalusSymbol const* slf) {
213223
ZKC_CHECK_NULL(slf);
214224
ZKC_RETURN_CATCH(slf->name().c_str());

src/DaedalusVm.cc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -456,6 +456,12 @@ void ZkDaedalusVm_registerExternalDefault(ZkDaedalusVm* slf, ZkDaedalusVmExterna
456456
slf->externalDefault = [cb, ctx](ZkDaedalusVm* vm, ZkDaedalusSymbol* sym) { cb(ctx, vm, sym); };
457457
}
458458

459+
void ZkDaedalusVm_setAccessTrapCallback(ZkDaedalusVm* slf, ZkDaedalusVmTrapCallback cb, void* ctx) {
460+
ZKC_TRACE_FN();
461+
ZKC_CHECK_NULLV(slf);
462+
slf->handle.register_access_trap([cb, ctx](zenkit::DaedalusSymbol const& sym) { cb(ctx, &sym); });
463+
}
464+
459465
void ZkDaedalusVm_printStackTrace(ZkDaedalusVm* slf) {
460466
ZKC_TRACE_FN();
461467
ZKC_CHECK_NULLV(slf);

0 commit comments

Comments
 (0)