48 lines
1.6 KiB
Diff
48 lines
1.6 KiB
Diff
From: Felix Fietkau <nbd@nbd.name>
|
|
Date: Wed, 11 Jun 2025 17:35:00 +0200
|
|
Subject: [PATCH] vm: export function for converting exception to ucode
|
|
value
|
|
|
|
This can be used to simplify implementing module execption handlers in
|
|
ucode.
|
|
|
|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
---
|
|
|
|
--- a/include/ucode/vm.h
|
|
+++ b/include/ucode/vm.h
|
|
@@ -152,6 +152,7 @@ uc_exception_type_t uc_vm_call(uc_vm_t *
|
|
|
|
void __attribute__((format(printf, 3, 0)))
|
|
uc_vm_raise_exception(uc_vm_t *vm, uc_exception_type_t type, const char *fmt, ...);
|
|
+uc_value_t *uc_vm_exception_object(uc_vm_t *vm);
|
|
|
|
uc_vm_status_t uc_vm_execute(uc_vm_t *vm, uc_program_t *fn, uc_value_t **retval);
|
|
uc_value_t *uc_vm_invoke(uc_vm_t *vm, const char *fname, size_t nargs, ...);
|
|
--- a/vm.c
|
|
+++ b/vm.c
|
|
@@ -813,9 +813,12 @@ uc_vm_exception_tostring(uc_vm_t *vm, si
|
|
return message ? ucv_get(message) : ucv_string_new("Exception");
|
|
}
|
|
|
|
-static uc_value_t *
|
|
-uc_vm_exception_new(uc_vm_t *vm, uc_exception_type_t type, const char *message, uc_value_t *stacktrace)
|
|
+uc_value_t *
|
|
+uc_vm_exception_object(uc_vm_t *vm)
|
|
{
|
|
+ uc_exception_type_t type = vm->exception.type;
|
|
+ const char *message = vm->exception.message;
|
|
+ uc_value_t *stacktrace = vm->exception.stacktrace;
|
|
uc_value_t *exception_prototype = uc_vm_registry_get(vm, "vm.exception.proto");
|
|
uc_value_t *exo;
|
|
|
|
@@ -880,7 +883,7 @@ uc_vm_handle_exception(uc_vm_t *vm)
|
|
ucv_put(uc_vm_stack_pop(vm));
|
|
|
|
/* prepare exception object and expose it to user handler code */
|
|
- exo = uc_vm_exception_new(vm, vm->exception.type, vm->exception.message, vm->exception.stacktrace);
|
|
+ exo = uc_vm_exception_object(vm);
|
|
|
|
uc_vm_stack_push(vm, exo);
|
|
|