diff --git a/src/include/reb-ext.h b/src/include/reb-ext.h index 5639dd5244..de3fb688f0 100644 --- a/src/include/reb-ext.h +++ b/src/include/reb-ext.h @@ -73,7 +73,10 @@ typedef union rxi_arg_val { int height:16; }; struct { - void *ptr; + union { + void *ptr; + REBHOB *hob; // Handle's context object + }; REBCNT type; // Handle's name (symbol) REBFLG flags:16; // Handle_Flags REBCNT index:16; // Index into Reb_Handle_Spec value @@ -127,6 +130,7 @@ typedef int (*RXICAL)(int cmd, RXIFRM *args, REBCEC *ctx); #define RXA_OBJECT(f,n) (RXA_ARG(f,n).addr) #define RXA_MODULE(f,n) (RXA_ARG(f,n).addr) #define RXA_HANDLE(f,n) (RXA_ARG(f,n).handle.ptr) +#define RXA_HANDLE_CONTEXT(f,n) (RXA_ARG(f,n).handle.hob) #define RXA_HANDLE_TYPE(f,n) (RXA_ARG(f,n).handle.type) #define RXA_HANDLE_FLAGS(f,n) (RXA_ARG(f,n).handle.flags) #define RXA_HANDLE_INDEX(f,n) (RXA_ARG(f,n).handle.index) diff --git a/src/include/sys-value.h b/src/include/sys-value.h index 3e78cdc375..01241ee07b 100644 --- a/src/include/sys-value.h +++ b/src/include/sys-value.h @@ -1091,7 +1091,10 @@ typedef struct Reb_Handle_Spec { } REBHSP; typedef struct Reb_Handle_Context { - REBYTE *data; // Pointer to raw data + union { + REBYTE *data; // Pointer to raw data + void *handle; // Unspecified pointer (external handle) + }; REBCNT sym; // Index of the word's symbol. Used as a handle's type! REBFLG flags:16; // Handle_Flags (HANDLE_CONTEXT_MARKED and HANDLE_CONTEXT_USED) REBCNT index:16; // Index into Reb_Handle_Spec value