summaryrefslogtreecommitdiffstats
path: root/generic/tclNRE.h
diff options
context:
space:
mode:
authorMiguel Sofer <miguel.sofer@gmail.com>2016-01-30 23:48:17 (GMT)
committerMiguel Sofer <miguel.sofer@gmail.com>2016-01-30 23:48:17 (GMT)
commitf468c8d414ed86b6cc49e569f0632e020ffe7b61 (patch)
tree69d8170f71e67cc76ac56a9b4c92b0b248d94cc8 /generic/tclNRE.h
parent55d12b5a36a763cfe022a118af56fbaa8855bec2 (diff)
downloadtcl-f468c8d414ed86b6cc49e569f0632e020ffe7b61.zip
tcl-f468c8d414ed86b6cc49e569f0632e020ffe7b61.tar.gz
tcl-f468c8d414ed86b6cc49e569f0632e020ffe7b61.tar.bz2
NRE API change: callbacks now have three void* arguments (prev. 4)
Diffstat (limited to 'generic/tclNRE.h')
-rw-r--r--generic/tclNRE.h20
1 files changed, 12 insertions, 8 deletions
diff --git a/generic/tclNRE.h b/generic/tclNRE.h
index 74b5997..03532df 100644
--- a/generic/tclNRE.h
+++ b/generic/tclNRE.h
@@ -23,26 +23,30 @@ typedef struct NRE_stack {
struct NRE_stack *next;
} NRE_stack;
+#define NRE_newExtra(ptr) \
+ TclSmallAlloc(5*sizeof(ClientData), ptr)
+#define NRE_freeExtra(ptr) TclSmallFree(ptr)
+
/*
* Inline versions of Tcl_NRAddCallback and friends
*/
#define TOP_CB(iPtr) (((Interp *)(iPtr))->execEnvPtr->callbackPtr)
-#define TclNRAddCallback(interp,postProcPtr,data0,data1,data2,data3) \
+#define TclNRAddCallback(interp,postProcPtr,data0,data1,data2) \
do { \
NRE_callback *cbPtr; \
ALLOC_CB(interp, cbPtr); \
- INIT_CB(cbPtr, postProcPtr,data0,data1,data2,data3); \
+ INIT_CB(cbPtr, postProcPtr,data0,data1,data2); \
} while (0)
-#define INIT_CB(cbPtr, postProcPtr,data0,data1,data2,data3) \
+#define INIT_CB(cbPtr, postProcPtr,data0,data1,data2) \
do { \
cbPtr->procPtr = (postProcPtr); \
cbPtr->data[0] = (ClientData)(data0); \
cbPtr->data[1] = (ClientData)(data1); \
cbPtr->data[2] = (ClientData)(data2); \
- cbPtr->data[3] = (ClientData)(data3); \
+ cbPtr->data[3] = NULL; \
} while (0)
#define POP_CB(interp, cbPtr) \
@@ -65,15 +69,15 @@ typedef struct NRE_stack {
#define NRE_TRAMPOLINE 0
#if NRE_TRAMPOLINE
-#define NRE_JUMP(interp,postProcPtr,data0,data1,data2,data3) \
- TclNRAddCallback((interp),(postProcPtr),(data0),(data1),(data2),(data3)); \
+#define NRE_JUMP(interp,postProcPtr,data0,data1,data2) \
+ TclNRAddCallback((interp),(postProcPtr),(data0),(data1),(data2)); \
NRE_NEXT(TCL_OK)
#define NRE_NEXT(result) \
return (result)
#else
/* no trampoline, optimized sibcalls */
-#define NRE_JUMP(interp,postProcPtr,data0,data1,data2,data3) \
- TclNRAddCallback((interp),(postProcPtr),(data0),(data1),(data2),(data3)); \
+#define NRE_JUMP(interp,postProcPtr,data0,data1,data2) \
+ TclNRAddCallback((interp),(postProcPtr),(data0),(data1),(data2)); \
NRE_NEXT(TCL_OK)
#define NRE_NEXT(result) \
do { /* optimized indirect sibling calls?! */ \