Add support for Tcl 9

Started by Peter Eisentrautabout 1 year ago3 messages
#1Peter Eisentraut
peter@eisentraut.org
1 attachment(s)

Tcl 9 changed several API functions to take Tcl_Size, which is
ptrdiff_t, instead of int, for 64-bit enablement. We have to change a
few local variables to be compatible with that. We also provide a
fallback typedef of Tcl_Size for older Tcl versions. Here is a patch
for that.

The affected variables are used for quantities that will not approach
values beyond the range of int (usually number of columns), so this
doesn't change any functionality, AFAICT.

Attachments:

0001-Add-support-for-Tcl-9.patchtext/plain; charset=UTF-8; name=0001-Add-support-for-Tcl-9.patchDownload
From 42ccfddb24536a863e8df92d9f6348bf319d55b3 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter@eisentraut.org>
Date: Fri, 15 Nov 2024 10:45:32 +0100
Subject: [PATCH] Add support for Tcl 9

Tcl 9 changed several API functions to take Tcl_Size, which is
ptrdiff_t, instead of int, for 64-bit enablement.  We have to change a
few local variables to be compatible with that.  We also provide a
fallback typdef of Tcl_Size for older Tcl versions.

The affected variables are used for quantities that will not approach
values beyond the range of int, so this doesn't change any
functionality.
---
 src/pl/tcl/pltcl.c | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/src/pl/tcl/pltcl.c b/src/pl/tcl/pltcl.c
index 80de0db40de..e2d9246a678 100644
--- a/src/pl/tcl/pltcl.c
+++ b/src/pl/tcl/pltcl.c
@@ -55,6 +55,10 @@ PG_MODULE_MAGIC;
 #define CONST86
 #endif
 
+#if !HAVE_TCL_VERSION(8,7)
+typedef int Tcl_Size;
+#endif
+
 /* define our text domain for translations */
 #undef TEXTDOMAIN
 #define TEXTDOMAIN PG_TEXTDOMAIN("pltcl")
@@ -987,7 +991,7 @@ pltcl_func_handler(PG_FUNCTION_ARGS, pltcl_call_state *call_state,
 		HeapTuple	tup;
 		Tcl_Obj    *resultObj;
 		Tcl_Obj   **resultObjv;
-		int			resultObjc;
+		Tcl_Size	resultObjc;
 
 		/*
 		 * Set up data about result type.  XXX it's tempting to consider
@@ -1063,7 +1067,7 @@ pltcl_trigger_handler(PG_FUNCTION_ARGS, pltcl_call_state *call_state,
 	int			tcl_rc;
 	int			i;
 	const char *result;
-	int			result_Objc;
+	Tcl_Size	result_Objc;
 	Tcl_Obj   **result_Objv;
 	int			rc PG_USED_FOR_ASSERTS_ONLY;
 
@@ -2089,7 +2093,7 @@ pltcl_quote(ClientData cdata, Tcl_Interp *interp,
 	char	   *tmp;
 	const char *cp1;
 	char	   *cp2;
-	int			length;
+	Tcl_Size	length;
 
 	/************************************************************
 	 * Check call syntax
@@ -2283,7 +2287,7 @@ pltcl_returnnext(ClientData cdata, Tcl_Interp *interp,
 		if (prodesc->fn_retistuple)
 		{
 			Tcl_Obj   **rowObjv;
-			int			rowObjc;
+			Tcl_Size	rowObjc;
 
 			/* result should be a list, so break it down */
 			if (Tcl_ListObjGetElements(interp, objv[1], &rowObjc, &rowObjv) == TCL_ERROR)
@@ -2625,7 +2629,7 @@ pltcl_SPI_prepare(ClientData cdata, Tcl_Interp *interp,
 				  int objc, Tcl_Obj *const objv[])
 {
 	volatile MemoryContext plan_cxt = NULL;
-	int			nargs;
+	Tcl_Size	nargs;
 	Tcl_Obj   **argsObj;
 	pltcl_query_desc *qdesc;
 	int			i;
@@ -2763,7 +2767,7 @@ pltcl_SPI_execute_plan(ClientData cdata, Tcl_Interp *interp,
 	const char *arrayname = NULL;
 	Tcl_Obj    *loop_body = NULL;
 	int			count = 0;
-	int			callObjc;
+	Tcl_Size	callObjc;
 	Tcl_Obj   **callObjv = NULL;
 	Datum	   *argvalues;
 	MemoryContext oldcontext = CurrentMemoryContext;
-- 
2.47.0

#2Tristan Partin
tristan@partin.io
In reply to: Peter Eisentraut (#1)
Re: Add support for Tcl 9

Looks correct to me. TIPs 628[0]https://core.tcl-lang.org/tips/doc/trunk/tip/628.md and 666[1]https://core.tcl-lang.org/tips/doc/trunk/tip/666.md seem to be the proposals which added
Tcl_Size and changed functions to use the type.

Reviewed-by: Tristan Partin <tristan@partin.io>

[0]: https://core.tcl-lang.org/tips/doc/trunk/tip/628.md
[1]: https://core.tcl-lang.org/tips/doc/trunk/tip/666.md

--
Tristan Partin
Neon (https://neon.tech)

#3Peter Eisentraut
peter@eisentraut.org
In reply to: Tristan Partin (#2)
Re: Add support for Tcl 9

On 25.11.24 05:07, Tristan Partin wrote:

Looks correct to me. TIPs 628[0] and 666[1] seem to be the proposals
which added Tcl_Size and changed functions to use the type.

Reviewed-by: Tristan Partin <tristan@partin.io>

Committed and backpatched. Thanks for checking.