diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/ucode/lib.h | 14 | ||||
-rw-r--r-- | include/ucode/types.h | 1 |
2 files changed, 14 insertions, 1 deletions
diff --git a/include/ucode/lib.h b/include/ucode/lib.h index 0709702..74d8866 100644 --- a/include/ucode/lib.h +++ b/include/ucode/lib.h @@ -38,14 +38,26 @@ __hidden void uc_error_message_indent(char **msg); __hidden uc_value_t *uc_require_library(uc_vm_t *vm, uc_value_t *nameval, bool so_only); /* vm helper */ +static inline uc_value_t * +_uc_fn_this_res(uc_vm_t *vm) +{ + return vm->callframes.entries[vm->callframes.count - 1].ctx; +} static inline void * _uc_fn_this(uc_vm_t *vm, const char *expected_type) { - return ucv_resource_dataptr(vm->callframes.entries[vm->callframes.count - 1].ctx, expected_type); + return ucv_resource_dataptr(_uc_fn_this_res(vm), expected_type); +} + +static inline void * +_uc_fn_thisval(uc_vm_t *vm, const char *expected_type) +{ + return ucv_resource_data(_uc_fn_this_res(vm), expected_type); } #define uc_fn_this(...) _uc_fn_this(vm, __VA_ARGS__) +#define uc_fn_thisval(...) _uc_fn_thisval(vm, __VA_ARGS__) static inline uc_value_t * _uc_fn_arg(uc_vm_t *vm, size_t nargs, size_t n) diff --git a/include/ucode/types.h b/include/ucode/types.h index bae2dd5..22fe9a9 100644 --- a/include/ucode/types.h +++ b/include/ucode/types.h @@ -392,6 +392,7 @@ uc_resource_type_t *ucv_resource_type_add(uc_vm_t *, const char *, uc_value_t *, uc_resource_type_t *ucv_resource_type_lookup(uc_vm_t *, const char *); uc_value_t *ucv_resource_new(uc_resource_type_t *, void *); +void *ucv_resource_data(uc_value_t *uv, const char *); void **ucv_resource_dataptr(uc_value_t *, const char *); uc_value_t *ucv_regexp_new(const char *, bool, bool, bool, char **); |