Files
openwrt-R7800-nss/package/utils/ucode/patches/100-vm-export-function-for-converting-exception-to-ucode.patch
Felix Fietkau b626262226 ucode: update ubus/uloop exception handling patches
Function renames and a leak fix

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2025-07-14 12:16:50 +02:00

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);